我很惊讶在JS看到这样一个基本的减法错误,我相信你们这里的大多数人都会遇到这个问题,请帮我解决这个问题, 我所做的就是从100减去一个数字,这会产生意想不到的结果,下面列举了一个例子
100 - 99.1
// returns 0.9000000000000057
我在这里做错了吗? :S我很困惑
答案 0 :(得分:12)
浮点值永远不会像您期望的那样准确。您可以使用Number对象将其转换为您需要的答案。
Number(100).toFixed(2) - Number(99.1).toFixed(2)
答案 1 :(得分:7)
您正在处理浮点数,而不是整数。这是预期的。
原因是你不能准确地用二进制表示0.1和0.3之类的数字。就像你不能用十进制形式表示1/3一样。
答案 2 :(得分:4)
在JavaScript中,所有数字类型都是Number
个对象,它们表示为双精度浮点数。
另一方面,您可以使用Number
的{{1}}方法检索这些数字的字符串表示形式,该方法接受一个数字,表示您希望的小数点数。返回基于接收者表示的字符串。
一个例子:
toFixed
答案 3 :(得分:2)
这是浮点数的工作原理,它们并不精确。 http://en.wikipedia.org/wiki/Floating_point可能是有用的阅读。
答案 4 :(得分:1)
首先阻止自己将浮点值赋给变量,然后使用直接表达式对变量进行处理。这是一个例子:
**var c = 80.35-20.35;
alert(c.toFixed(2));**
这将指定一个60.00,但解决此问题的其他方法将返回59.99999999。
答案 5 :(得分:0)
这不是一个完美的答案,但它确实有效。
function format_float_bug(num)
{
return parseFloat( num.toFixed(15) );
}
你可以使用如下,
format_float_bug(4990 % 10);
因为下面的数字(49.89999999999999857891452848)前15个小数位就像是9999999