并非所有浏览器都支持 toLocaleString()? [复制]
Posted
技术标签:
【中文标题】并非所有浏览器都支持 toLocaleString()? [复制]【英文标题】:toLocaleString() not supported in all browsers? [duplicate] 【发布时间】:2013-04-22 22:23:52 【问题描述】:我有这个简单的功能:
Chrome、Firefox、IE:
Number(1000000).toLocaleString()
"1 000 000" // in french system, the space is the separator instead of the comma
Opera,傲游:
Number(1000000).toLocaleString()
"1000000"
为什么 Opera 和 Maxthon 不能格式化?他们支持这种方法,但没有以正确的方式执行?
有没有toLocaleString()
的替代品?
【问题讨论】:
只是指出您也不应该期望用户之间的统一输出Number(1000000).toLocaleString();
给我"1,000,000"
(Google Chrome,en-GB)。请参阅MDN page,了解它应该采用哪些参数以及支持哪些浏览器。
@PaulS。对不起,忘了准确地说我使用的是法语操作系统,在法语系统中,分隔是使用空格而不是逗号完成的
Chrome 中好像也没有!抱歉,因为我认为如果方法存在,则必须始终返回结果!
【参考方案1】:
根据用户的区域设置,输出也会有所不同,即使他们的浏览器支持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"
【讨论】:
啊!这样就可以了!谢谢 因为我来自python,我认为这很简单,方法是反转它的字符串,然后重新反转它......但它会产生很多行!在python中,如果你想反转一个字符串,你只需做一个否定的步骤,"hello"[::-1]
,最新的元素是否定的,例如o
将是"hello"[-1]
真的世界很难来自python的人;) 再次感谢您
'abc'.split('').reverse().join('')
是 'cba'
,但您仍然需要像这样循环遍历它。只是循环下来。此外,'abc'.slice(-1)
是 'c'
。
啊!我应该学习更多关于 javascript 的课程,再次感谢你 :)
我无法理解这段代码,这是我可能不想自己编写解决方案的原因之一。【参考方案2】:
language spec 的定义非常开放:
15.7.4.3
Number.prototype.toLocaleString()
生成一个字符串值,该值表示根据宿主环境当前语言环境的约定格式化的数字值。 此函数依赖于实现,允许但不鼓励它返回与 toString 相同的内容。
允许不同的浏览器以不同的方式实现它,并且可以根据用户选择的语言环境以不同的方式实现它。
【讨论】:
所以我没有直接替换?我必须对格式进行编程还是使用外部库? @AbdelouahabPp,如果您需要在所有浏览器上使用相同的数字格式,那么是的,您需要避免依赖于实现的函数。 啊,谢谢,希望他们能将其从该列表中删除;)以上是关于并非所有浏览器都支持 toLocaleString()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
toLocaleString 不适用于所有浏览器中小于 10000 的数字
toLocaleString 不适用于所有浏览器中小于 10000 的数字