Javascript中数字相等比较中的不一致性
Inconsistency in Equality Comparison of Numbers in Javascript
我读到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.30000000000000004
,bNum
返回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);
相关文章:
- Regex:匹配以“AM”结尾的单词(不区分大小写比较)
- 元素值比较的结果不正确
- 比较数组中的连续元素不会返回任何结果(javascript)
- Backbone.js比较器函数是'工作不正常
- 比较 2 个数组并得到这些变量不匹配
- 替换函数后的Javascript比较字符串不起作用
- 捕获异常,而不是比较性能的数组值
- 比较两个对象数组中的重复对象,并在其'这在JavaScript中不是重复的
- 在获取后将新模型准备到集合中(不带比较器)
- 比较:用缓冲区视图调整ArrayBuffer的大小(Uint8 vs Float64),我是不是遗漏了什么
- 使用||进行比较(==)而不是赋值(=)时的简写
- Javascript中数字相等比较中的不一致性
- null和未定义的不一致比较
- 不能比较数组值,如果它不是数字
- 找出date. parse()不等于比较日期的原因
- Javascript操作符不能比较整数和零(例如:10、100、1000等)
- if和else在XMLHttpRequest()内部不进行比较
- 不能比较条件语句中int类型的变量
- Javascript空类型不能比较
- 不能比较JQuery中的变量