javascript - 相同的周期数对于 if 来说是不同的

标签 javascript numbers

我正在构建一个基于 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 ,它们并不完全精确,会出现微小的差异,并且可能会成倍增加。

现在,如果您确实像这样创建了 AB:

var A = 10 / 3;
var B = 10 / 3;

...那么两个比较都将为true ( proof )。显然,您以一种方式得到A,而以另一种方式得到B,而事实上,它们是略有不同的。 (我很惊讶地听到 A == BfalseA - B == 0true >,不过。)

您需要将它们四舍五入到您认为合适的位数,并比较四舍五入的结果。

关于javascript - 相同的周期数对于 if 来说是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792335/

相关文章:

javascript - 拖放 JavaScript 缩略图生成。由于超出 base64 限制导致浏览器崩溃

javascript - 如何在 express js 中访问使用 app.set() 设置的变量

Python-将带分数转换为 float

Jquery 查找和替换数字

numbers - 用连续的数字组成一个数字

javascript - Woocommerce 3.x 图像交换 "On Hover"大拇指

javascript - 如何根据出现顺序更改多个图像的百分比宽度?

javascript - CSS 文本溢出前置省略号

r - 如何使用R将数字提取为数字?

php - 一个从 php 中的字符串返回数字的简单函数