Number(123.456).toFixed(20)喷出
"123.45600000000000306954"306954从哪里来?我知道用二进制表示的数字是不准确的。但是,我在文档中没有发现调用号码(/../)会导致精度下降的任何说法。
mdn说
一种数字的字符串表示形式,它不使用指数表示法,并且在小数位之后有精确的数字数字。如果有必要,数字会四舍五入,如果有必要,小数部分会用零填充,以使其具有指定的长度。如果数字大于1e+21,则此方法只调用Number.toString()并以指数表示法返回字符串
编辑
toFixed返回不动点而不是浮点..。

发布于 2012-05-15 15:38:45
这完全与十进制数字的浮点表示有关。
计算机不能准确地表示123.456,因此使用最近的二进制数代替。
有关更多细节,请参见浮点导轨或关于浮点算法,每个计算机科学家应该知道什么?。
根据第一个链接,没有内置的解决方案(i,.e )。( Javascript中的十进制类型)。如果这对您来说是一个真正的问题,而不是一个奇怪的问题,那么Java的BigDecimal类是可用的。
回复编辑:这不是Number的问题。在您的工作示例中,您声明了一个整数字面值(123) --它们可以精确地表示。在失败的示例中,您使用了浮点文本123.456,它目前由运行时处理,它将由一系列不完全是123.456的二进制数字表示。
问题在于浮点文字,而不是Number本身。
https://stackoverflow.com/questions/10604105
复制相似问题