舍入浮点数,然后转到语言环境字符串

Posted

技术标签:

【中文标题】舍入浮点数,然后转到语言环境字符串【英文标题】:Round float and then to locale string 【发布时间】:2015-05-07 08:37:02 【问题描述】:

我有一个奇怪的例子。 如果我这样写:

parseFloat("12345,987").toLocaleString("slv")

结果将如预期(slv 有逗号作为小数分隔符): 12.345,987

但如果我先四舍五入到小数点后两位:

parseFloat("12345,987").toFixed(2).toLocaleString("slv")

结果总是带有英文分隔符(点): 12,345.99

这怎么可能? 应该是:12.345,99

【问题讨论】:

parseFloat的输出是一个数字,toFixed的输出是一个字符串。 【参考方案1】:

如this answer 中所述,parseFloat() 只能与小数一起使用,因此使用逗号传递字符串可能会导致意外结果。

例如,我在 JsFiddle 中尝试了parseFloat("12345,987").toLocaleString("slv"),而我的浏览器(英国语言环境)给了我12.345,这与您的结果不同。

还有一点需要注意的是,toFixed() 返回一个字符串,但toLocaleString() 对数字进行操作。将toLocaleString() 应用于字符串也可能出于其他原因产生意外结果。

【讨论】:

【参考方案2】:

谢谢。我找到了一个解决方案: parseFloat("12345,987").toLocaleString("slv", minimumFractionDigits: 2, maximumFractionDigits: 2 );

这工作正常。 "比如我试过 parseFloat("12345,987").toLocaleString("slv")"

"djskinner" - 你可以试试:"sl-SI" 而不是 slv?还是不行吗?

【讨论】:

以上是关于舍入浮点数,然后转到语言环境字符串的主要内容,如果未能解决你的问题,请参考以下文章

舍入浮点数的源代码

使用 0.5 规则舍入浮点数的方法

舍入浮点数的最短函数c ++

如何在PHP中舍入浮点数?

为什么舍入浮点数1.4999999999999999产生2?

C中的printf如何对浮点数进行舍入?