tolocalestring number miles mexico example espaƱol decimals colombia and javascript formatting

number - tolocalestring javascript



toLocaleString() no es compatible con todos los navegadores? (2)

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"