Javascript中数字相等比较中的不一致性

Inconsistency in Equality Comparison of Numbers in Javascript

本文关键字:不一致性 比较 数字 Javascript      更新时间:2023-09-26

我读到Javascript中没有整数类型,只有浮点双精度(64位)类型。我知道,正因为如此,即使在比较整数时,也会引入一些浮点运算错误。

然而,我不明白为什么下面的三个比较会产生不同的结果:

var aInt = 1 + 2;
var bInt = 3;
console.log("Comparing integers: ");
console.log(aInt === bInt); // Prints true
var aNum = 0.1 + 0.2;
var bNum = 0.3;
console.log("Comparing 0.1 + 0.2 === 0.3: ");
console.log(aNum === bNum); // Prints false
var aNum2 = 1.0 + 2.0;
var bNum2 = 3.0;
console.log("Comparing 1.0 + 2.0 === 3.0: ");
console.log(aNum2 === bNum2); // Prints true

我本希望以上所有比较都能评估为false

在第二个示例中,aNum返回0.30000000000000004bNum返回0.3

要在严格相等比较时返回true,请尝试使用.toFixed()Number()

var aNum = 0.1 + 0.2;
var bNum = 0.3;
console.log(Number(aNum.toFixed(1)), bNum);
console.log(Number(aNum.toFixed(1)) === bNum);