可能重复:
Elegant workaround for JavaScript floating point number problem
为什么在使用javascript添加2个数字时,它会返回一个疯狂的小数点?
如果我在纸上添加285.72 + 142.86它等于428.58,你可以用计算器得到相同的答案。
但是,如果我从2个文本框中添加该数字,则返回428.58000000000004
我需要我的javascript才能返回428.58。我知道我可以使用.toFixed(),但是我不愿意,因为我不明白为什么在两个数字之后添加两个数字会在小数点之后创建如此疯狂的位数。
答案 0 :(得分:4)
并非所有数字都可以完全以浮点重复。进行近似,当你在一个不确定的数字上进行操作后,情况会变得更糟。
请参阅此Wikipedia条目以获取示例: http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
如果您将添加输入更改为可以通过浮点(如1/8)精确表示的内容,则可以使用。试试数字:285.125和142.125。
Microsoft .NET有类似的行为:
float x = 285.72f
float y = 142.86f
float z = x + y
结果: z = 428.580017
答案 1 :(得分:3)
您必须使用.toFixed,因为Javascript使用IEEE 754-2008浮点运算符导致此行为。这些二进制浮点数只是近似值,因此您必须使用舍入。
答案 2 :(得分:2)
这是因为浮点数不使用某些十进制数的精确表示,因此可能出现算术不精确。除了将数字四舍五入到你需要的精度之外,我不知道有什么更好的方法,比如toFixed