我有这个简单的功能:
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"
为什么Opera和Maxthon无法格式化呢?他们支持这种方法,但不以正确的方式执行它?
是否有toLocaleString()
替换?
答案 0 :(得分:14)
根据用户的区域设置,输出也会有所不同,即使浏览器支持Number.prototype.toLocaleString
,例如对于我 en-GB ,Number(1000000).toLocaleString();
给了我"1,000,000"
。
是否有
toLocaleString()
替换?
为什么不写一个来做你想要的呢?例如,
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('.');
}
现在
localeString(1000000.00001);
// "1 000 000.00001"
答案 1 :(得分:4)
language spec使定义非常开放:
15.7.4.3
Number.prototype.toLocaleString()
生成一个String值,该值表示根据主机环境的当前语言环境的约定格式化的Number值。 此函数与实现有关,允许但不鼓励它返回与toString 相同的内容。
允许不同的浏览器以不同的方式实现它,并且可以根据用户选择的语言环境以不同的方式实现它。