Javascript浮点减法

时间:2011-05-17 08:02:12

标签: javascript floating-point

我想知道如何在javascript中减去两个负浮点数。我试过了:

alert(-0.2-0.1);

,结果为-0.30000000000000004。难道我做错了什么?我需要做些什么才能获得-0.3

5 个答案:

答案 0 :(得分:20)

不,您的代码没有任何问题,大多数小数部分无法准确表示 在二进制文件中,使用

number.toFixed(x)

其中x是您想要的小数位数,number是减法的结果。

答案 1 :(得分:2)

此处解释了您遇到问题的原因: Why does modulus operator return fractional number in javascript?

可能的解决方案可能是:

<script type="text/javascript">
var result = (-20-10)/100;
alert("My result is "+result);
</script>

答案 2 :(得分:2)

你没有做错什么,你看到的是计算机在基数2中存储数字的副作用。在基数10中,不能精确地表示1/3:.33333333(在3上有一个条)。对于基数2或二进制的1/10和1/5也是如此。您看到的答案仅仅是舍入错误的结果。如果您正在使用资金,通常建议将值存储为美分,以避免出现浮点错误。

就修复结果而言,您可以执行以下操作:

var SIGDIG= 100000000;
alert( Math.floor((-0.2-0.1)*SIGDIG)/SIGDIG );

答案 3 :(得分:1)

toFixed()是您必须寻找的。

E.g

number.toFixed(x); 

其中x是小数点后的位数。它是可选的,默认值为0.

更多信息:Javascript Number.toFixed() Method

答案 4 :(得分:1)

另一种可能的解决方案可能是:

Number((-0.2-0.1).toFixed(x))

其中x应该是您想要的小数点容差。

使用x 16运行此选项会产生-0.3的输出。

-0.3 === Number((-0.2-0.1).toFixed(16)) // true, and also with every 0 < x < 16

让我知道。