我想知道如何在javascript中减去两个负浮点数。我试过了:
alert(-0.2-0.1);
,结果为-0.30000000000000004
。难道我做错了什么?我需要做些什么才能获得-0.3
?
答案 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()
是您必须寻找的。 p>
E.g
number.toFixed(x);
其中x是小数点后的位数。它是可选的,默认值为0.
答案 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
让我知道。