【问题标题】:toLocaleString() not supported in all browsers? [duplicate]并非所有浏览器都支持 toLocaleString()? [复制]
【发布时间】:2013-04-15 23:36:34
【问题描述】:

我有这个简单的功能:

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 中好像也没有!抱歉,因为我认为如果方法存在,则必须始终返回结果!

标签: javascript formatting


【解决方案1】:

language spec 的定义非常开放:

15.7.4.3Number.prototype.toLocaleString()

生成一个字符串值,该值表示根据宿主环境当前语言环境的约定格式化的数字值。 此函数依赖于实现,允许但不鼓励它返回与 toString 相同的内容

允许不同的浏览器以不同的方式实现它,并且可以根据用户选择的语言环境以不同的方式实现它。

【讨论】:

  • 所以我没有直接替换?我必须对格式进行编程还是使用外部库?
  • @AbdelouahabPp,如果您需要在所有浏览器上使用相同的数字格式,那么是的,您需要避免依赖于实现的函数。
  • 啊,谢谢,希望他们能将其从该列表中删除;)
【解决方案2】:

根据用户的区域设置,输出也会有所不同,即使他们的浏览器支持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 的课程,再次感谢你 :)
  • 我无法理解这段代码,这是我可能不想自己编写解决方案的原因之一。
猜你喜欢
  • 2019-11-27
  • 2017-01-16
  • 1970-01-01
  • 2011-06-21
  • 2011-04-20
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
相关资源
最近更新 更多