number - tolocalestring javascript
toLocaleString() no es compatible con todos los navegadores? (2)
Esta pregunta ya tiene una respuesta aquí:
tengo esta simple función:
Chrome, Firefox, IE:
Number(1000000).toLocaleString()
"1 000 000" // in french system, the space is the separator instead of the comma
Opera, Maxthon:
Number(1000000).toLocaleString()
"1000000"
¿Por qué Opera y Maxthon no pueden formatearlo? ¿Apoyan este método pero no lo ejecutan de la manera correcta?
¿Hay algún reemplazo de toLocaleString()
?
La especificación del lenguaje deja la definición muy abierta:
15.7.4.3
Number.prototype.toLocaleString()
Produce un valor de cadena que representa este valor numérico formateado según las convenciones de la configuración regional actual del entorno host. Esta función depende de la implementación, y es permisible, pero no recomendable, que devuelva lo mismo que a String .
Se permite que diferentes navegadores lo implementen de manera diferente, y pueden implementarlo de manera diferente según la configuración regional elegida por el usuario.
El resultado también será diferente dependiendo de la configuración regional del usuario, incluso si Number.prototype.toLocaleString
es compatible con su navegador, por ejemplo, para mí en en-GB , Number(1000000).toLocaleString();
me da "1,000,000"
.
¿Hay algún reemplazo de
toLocaleString()
?
¿Por qué no escribir uno para hacer exactamente lo que quiere? Por ejemplo,
function localeString(x, sep, grp) {
var sx = (''''+x).split(''.''), s = '''', i, j;
sep || (sep = '' ''); // default seperator
grp || grp === 0 || (grp = 3); // default grouping
i = sx[0].length;
while (i > grp) {
j = i - grp;
s = sep + sx[0].slice(j, i) + s;
i = j;
}
s = sx[0].slice(0, i) + s;
sx[0] = s;
return sx.join(''.'');
}
Ahora
localeString(1000000.00001);
// "1 000 000.00001"