gpt4 book ai didi

javascript - 在什么时候比较 "integer"和 "float"等于 `true` ?

转载 作者:行者123 更新时间:2023-11-30 08:18:45 27 4
gpt4 key购买 nike

我了解 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER .

我知道 Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 等于 true。

但我最近才意识到:

var number = 2007199254740991;
var float = 2007199254740991.123;

console.log(number === float);
// => true

但是

var number = 1007199254740991;
var float = 1007199254740991.123;

console.log(number === float);
// => false

所以我的问题是,我们如何找到“最大安全 float ”?

编辑

我的问题:

“整数”和“ float ”之间的比较在什么时候等于 true

最佳答案

比较失败时问是错误的问题。比较两个数字总是正确的;当且仅当被比较的两个数字具有相同的值时,它才计算为真。

这个问题其实是在之前的操作中出现的。将源代码中的数字转换为 Number、添加数字和其他操作会在精确的实数数学值四舍五入为可表示为 float 的值时引入错误。

JavaScript 使用 IEEE-754 binary64,它有一个 53 位有效数( float 的小数部分)。这意味着任何大小为 252 或更大的数字都没有任何位可以表示小于 1 的值——它们没有小数部分。因此,当任何数字 252 或更大被转换为 JavaScript Number 时,结果是一个整数。

但较小的数字也会四舍五入。从 251 到 252,可用的最低有效位表示 2−1,或 ½。因此,此间隔中转换为 Number 的任何数字都必须生成整数或整数加 ½。这意味着一些数字,如 2251799813685248.6,将产生非整数 (2251799813685248.5),而其他数字,如 2251799813685248.8 将产生整数 ( 2251799813685249).

在低于 252 的每个量级,有些数字在转换为 Number 时会四舍五入为整数,而有些数字不会四舍五入为整数。 (大于 252,所有数字都四舍五入为整数。)在较小的量级,只有接近整数的数字才会四舍五入为整数——随着量级的减小,格式变得更加“敏感”。

关于javascript - 在什么时候比较 "integer"和 "float"等于 `true` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57489673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com