hace - Mostrar un número en formato indio usando Javascript
onclick void 0 (12)
Aquí está la función,
function numberWithCommas(x) {
return x.toString().substring(0,x.toString().split(''.'')[0].length-3).replace(//B(?=(/d{2})+(?!/d))/g, ",") + "," + x.toString().substring(x.toString().split(''.'')[0].length-3);
}
si su entrada es 10000.5,
numberWithCommas(10000.5)
Obtendrás una salida como esta, 10,000.5
Tengo el siguiente código para mostrar en el sistema de numeración indio.
var x=125465778;
var res= x.toString().replace(//B(?=(/d{3})+(?!/d))/g, ",");
Estoy obteniendo esta salida: 125,465,778
.
Necesito resultados como este: 12,54,65,778
.
Por favor, ayúdame a resolver este problema.
Basándome en la pregunta de Nidhinkumar, he comprobado las respuestas anteriores y, al manejar números negativos, la salida no será correcta, por ejemplo: -300 debe mostrarse como -300, pero las respuestas anteriores lo mostrarán como -, 300 que no es bueno, así que He intentado con el siguiente código que funciona incluso durante los casos negativos.
var negative = input < 0;
var str = negative ? String(-input) : String(input);
var arr = [];
var i = str.indexOf(''.'');
if (i === -1) {
i = str.length;
} else {
for (var j = str.length - 1; j > i; j--) {
arr.push(str[j]);
}
arr.push(''.'');
}
i--;
for (var n = 0; i >= 0; i--, n++) {
if (n > 2 && (n % 2 === 1)) {
arr.push('','');
}
arr.push(str[i]);
}
if (negative) {
arr.push(''-'');
}
return arr.reverse().join('''');
Dada una función de número por debajo, devuelve un número formateado en formato indio de agrupación de dígitos.
ej .: entrada: 12345678567545.122343
salida: 1,23,45,67,85,67,545.122343
function formatNumber(num) {
var n1, n2;
num = num + '''' || '''';
// works for integer and floating as well
n1 = num.split(''.'');
n2 = n1[1] || null;
n1 = n1[0].replace(/(/d)(?=(/d/d)+/d$)/g, "$1,");
num = n2 ? n1 + ''.'' + n2 : n1;
return num;
}
Esta función puede manejar el valor flotante de manera adecuada, además de otra respuesta
function convertNumber(num) {
var n1, n2;
num = num + '''' || '''';
n1 = num.split(''.'');
n2 = n1[1] || null;
n1 = n1[0].replace(/(/d)(?=(/d/d)+/d$)/g, "$1,");
num = n2 ? n1 + ''.'' + n2 : n1;
n1 = num.split(''.'');
n2 = (n1[1]) || null;
if (n2 !== null) {
if (n2.length <= 1) {
n2 = n2 + ''0'';
} else {
n2 = n2.substring(0, 2);
}
}
num = n2 ? n1[0] + ''.'' + n2 : n1[0];
return num;
}
esta función convertirá todas las funciones en flotar como lo es
function formatAndConvertToFloatFormat(num) {
var n1, n2;
num = num + '''' || '''';
n1 = num.split(''.'');
if (n1[1] != null){
if (n1[1] <= 9) {
n2 = n1[1]+''0'';
} else {
n2 = n1[1]
}
} else {
n2 = ''00'';
}
n1 = n1[0].replace(/(/d)(?=(/d/d)+/d$)/g, "$1,");
return n1 + ''.'' + n2;
}
Esto debería funcionar.
var number=12345678;
alert(number.toLocaleString());
también puede pasar los argumentos dentro de la función aquí por defualt, tomará la convención internacional. Si quiere usar la convención india, debe escribirla así.
alert(number.toLocaleString("hi-IN"));
Pero este código solo funcionará en Chrome, Mozzilla e IE. No funcionará en Safari.
Intente lo siguiente, he encontrado un complemento de formateador numérico aquí: número de script Java formateador
Al usar eso he hecho el siguiente código, funciona bien, prueba esto, te ayudará ...
SCRIPT:
<script src="format.20110630-1100.min.js" type="text/javascript"></script>
<script>
var FullData = format( "#,##0.####", 125465778)
var n=FullData.split(",");
var part1 ="";
for(i=0;i<n.length-1;i++)
part1 +=n[i];
var part2 = n[n.length-1]
alert(format( "#0,#0.####", part1) + "," + part2);
</script>
Insumos:
1) 125465778
2) 1234567.89
Productos:
1) 12,54,65,778
2) 12,34,567.89
Para enteros solo no se necesitan manipulaciones adicionales.
Esto coincidirá con cada dígito desde el final, teniendo 1 o más patrones de dos dígitos después, y lo reemplazará con sí mismo + ",":
"125465778".replace(/(/d)(?=(/d/d)+$)/g, "$1,");
-> "1,25,46,57,78"
Pero como queremos tener 3 al final, expresemos esto explícitamente agregando "/ d" adicional antes del final de la entrada:
"125465778".replace(/(/d)(?=(/d/d)+/d$)/g, "$1,");
-> "12,54,65,778"
Para enteros:
var x=12345678;
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '''')
lastThree = '','' + lastThree;
var res = otherNumbers.replace(//B(?=(/d{2})+(?!/d))/g, ",") + lastThree;
alert(res);
Para flotar:
var x=12345652457.557;
x=x.toString();
var afterPoint = '''';
if(x.indexOf(''.'') > 0)
afterPoint = x.substring(x.indexOf(''.''),x.length);
x = Math.floor(x);
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '''')
lastThree = '','' + lastThree;
var res = otherNumbers.replace(//B(?=(/d{2})+(?!/d))/g, ",") + lastThree + afterPoint;
alert(res);
Simplemente use https://osrec.github.io/currencyFormatter.js/
Entonces todo lo que necesitas es:
OSREC.CurrencyFormatter.format(2534234, { currency: ''INR'' });
// Returns ₹ 25,34,234.00
llego tarde, pero supongo que esto ayudará :)
puedes usar Number.prototype.toLocaleString()
Sintaxis
numObj.toLocaleString([locales [, options]])
var number = 123456.789;
// India uses thousands/lakh/crore separators
document.getElementById(''result'').innerHTML = number.toLocaleString(''en-IN'');
// → 1,23,456.789
document.getElementById(''result1'').innerHTML = number.toLocaleString(''en-IN'', {
maximumFractionDigits: 2,
style: ''currency'',
currency: ''INR''
});
// → Rs.123,456.79
<div id="result"></div>
<div id="result1"></div>
number.toLocaleString(''en-IN'');
Esto te ayudará a visualizar en el sistema de numeración indio. Eche un vistazo a la documentación