我正在构建一个基于 javascript 的网络应用程序;
对于特定的数据输入,函数返回值 10/3 = 3.333333333333333(这是 colsole.log 调用显示的小数位数);大约 200 行代码之后,我有 2 个变量(A 和 B)包含该值,我需要检查它是否是相同的值;
事实是,怎么可能有这样的输出?
console.log(A); //3.333333333333333
console.log(B); //3.333333333333333
console.log(A == B) //false
console.log(A-B == 0) //true??
由于数字在内存中的保存方式,我可以想象 A == B 是假的,但我希望它是真的;对我来说真正无法解释的是最后一行输出为什么是真的?
最佳答案
console.log
(甚至toString
)不会向您显示完整的数字,精确到逐位差异。 JavaScript(和许多其他语言)中使用的 float 是 IEEE-754 double float ,它们并不完全精确,会出现微小的差异,并且可能会成倍增加。
现在,如果您确实像这样创建了 A
和 B
:
var A = 10 / 3;
var B = 10 / 3;
...那么两个比较都将为true
( proof )。显然,您以一种方式得到A
,而以另一种方式得到B
,而事实上,它们是略有不同的。 (我很惊讶地听到 A == B
说 false
但 A - B == 0
说 true
>,不过。)
您需要将它们四舍五入到您认为合适的位数,并比较四舍五入的结果。
关于javascript - 相同的周期数对于 if 来说是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792335/