js到固定问题?

时间:2012-05-15 15:34:39

标签: javascript tofixed

Number(123.456).toFixed(20)

发射

"123.45600000000000306954"

306954来自哪里? 我知道内部用二进制表示的数字是准确的。

但是我没有在文档中找到 - 说明该数字(/.../)松散精度的部分。

mdn

  

不使用指数的数字的字符串表示形式   符号,小数位后面的位数正好。该   如果需要,数字是四舍五入的,并且小数部分用填充   必要时为零以使其具有指定的长度。如果数字是   大于1e + 21,此方法只调用Number.toString()和   以指数表示法返回一个字符串

我找不到任何关于额外数字的数据......

修改

toFixed返回固定点而不是浮点数... enter image description here

1 个答案:

答案 0 :(得分:2)

这完全与十进制数的浮点表示有关。

计算机无法准确表示123.456,因此会使用最接近的二进制数。

请参阅floating point guide,或了解详情What Every Computer Scientist Should Know About Floating-Point Arithmetic

根据第一个链接,Javascript中没有内置解决方案(i,.e。十进制类型)。有一个Java BigDecimal类的端口,如果这对你来说是一个真正的问题,而不是一个好奇的问题。

回复编辑:这不是Number的问题。在您的工作示例中,您声明了一个整数文字(123) - 这些可以完全表示。在您失败的示例中,您使用浮点文字123.456,它在运行时处理它时将由一系列二进制数字表示,这些二进制数字不是完全 {{1} }。

问题在于浮点文字,而不是123.456本身。