Javascript中的简单减法错误

Javascript中的简单减法错误,javascript,Javascript,在JS中看到这样一个基本的减法错误,我很震惊,我相信在座的大多数人都会遇到这个问题,请帮助我解决这个问题, 我所做的就是从100中减去一个数字,这会产生意想不到的结果,下面是一个例子 100 - 99.1 // returns 0.9000000000000057 我做错什么了吗S我很困惑这就是浮点数的工作原理,它们并不精确。可能是有用的阅读。在JavaScript中,所有数字类型都是Number对象,它们表示为双精度浮点数 另一方面,您可以使用Number的toFixed方法将这些数字的字符

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

100 - 99.1
// returns 0.9000000000000057

我做错什么了吗S我很困惑

这就是浮点数的工作原理,它们并不精确。可能是有用的阅读。

在JavaScript中,所有数字类型都是
Number
对象,它们表示为双精度浮点数

另一方面,您可以使用
Number
toFixed
方法将这些数字的字符串表示形式检索到特定的小数点,该方法接受一个数字,表示您希望返回的字符串根据接收者表示多少小数点

例如:

var five = 5.00001;
console.log(five.toFixed(1)); //5.0
**var c = 80.35-20.35;
alert(c.toFixed(2));**

浮点值永远不会像您期望的那样精确。您可以使用数字对象将其转换为您需要的答案

Number(100).toFixed(2) - Number(99.1).toFixed(2)

您使用的是浮点数,而不是整数。这是意料之中的


原因是您无法准确地用二进制表示0.1和0.3之类的数字。就像不能以十进制形式累加表示1/3一样。

首先要防止自己将浮点值赋给变量,然后用直接表达式赋给变量。以下是一个例子:

var five = 5.00001;
console.log(five.toFixed(1)); //5.0
**var c = 80.35-20.35;
alert(c.toFixed(2));**

这将分配一个60.00,但其他解决方法将返回59.9999999。

这不是一个完美的答案,但它是有效的

function format_float_bug(num)
{
   return parseFloat( num.toFixed(15) ); 
} 
您可以使用以下命令:

format_float_bug(4990 % 10);

因为下面的数字(49.8999999999857891452848)前15位小数点像9999999

你需要了解浮点数是如何存储的:可能是@Tomalak的重复,我很抱歉这是一个令人震惊的原因,我想我不符合你的程序员标准。我希望我能很快了解这些标准:)
Number(100-99.1)。toFixed(2)
更简洁,并且不会增加错误,因为100已经可以在base-2中完美地表示出来。toFixed对我有效,现在将开始研究浮点:)谢谢大家“浮点值永远不会像你期望的那样精确”这取决于一个人的期望,不是吗:)这不适用于这个:数字(100000)。toFixed(2)-数字(99111.57)。toFixed(2)它们是精确的。但可能并不完全是人们所期望的。