Javascript中的简单减法错误

时间:2011-03-01 10:12:22

标签: javascript

我很惊讶在JS看到这样一个基本的减法错误,我相信你们这里的大多数人都会遇到这个问题,请帮我解决这个问题, 我所做的就是从100减去一个数字,这会产生意想不到的结果,下面列举了一个例子

100 - 99.1
// returns 0.9000000000000057

我在这里做错了吗? :S我很困惑

6 个答案:

答案 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