可能重复:
Is JavaScript's Math broken?
Strange result with floating point addition
Safari 5.0.6中的一些简单的JavaScript计算,但在Firefox中也是如此:
var i=0.1;
i=i+0.01; //= 0.11
i=i+0.01; //= 0.12
i=i+0.01; //= 0.13
i=i+0.01; //= 0.14
i=i+0.01; // expected == 0.15
console.log(i); // == 0.15000000000000002
这种不精确性来自哪里?
当然,我可以使用i.toPrecision()
或其他方法处理它,但是它必须是那样的吗?这是一个浮点舍入错误吗?
在这个例子中也是如此:
var i=0.14+0.01; //expected == 0.15
console.log(i); //== 0.15000000000000002
在0.14和0.15之间发生了什么?
var i=0.1400001+0.01; //expected==0.1500001
console.log(i); //== 0.1500001 ok!
和
var i=0.14000001+0.01; //expected==0.15000001 !!
console.log(i); //== 0.15000001000000002
我需要做些什么才能获得正确的结果?
答案 0 :(得分:8)
浮点算术不精确,因为有些数字无法准确存储,因此使用了近似值。
What Every Computer Scientist Should Know About Floating-Point Arithmetic
你能把你的Number
作为整数来处理,然后用除法来得出最终答案吗?
答案 1 :(得分:0)
它们只是浮点错误。
使用整数,将你正在做的所有事物乘以你想要的10 *个精度。
答案 2 :(得分:0)
Floatinhg点数不是精确地存储在计算机中 - 您需要考虑它们的二进制表示。因此,使用浮点数运算可以得到舍入误差。