【发布时间】:2017-11-04 06:31:59
【问题描述】:
我有两个数字要比较。以下示例中的数字是 26^26 在两个不同系统中计算的结果。其中之一是我的 javascript 代码。
但是,当比较这两个数字时,我会得到这样的结果:
AssertionError [ERR_ASSERTION]: 4.0329146112660565e+26 == 4.0329146112661e+26
它们显然不相等,但理论上应该。
在 javascript 中对大数执行相等的正确方法是什么(即使它是一个近似值)?
【问题讨论】:
-
您可以将数字转换为字符串然后进行比较
-
你说的平等是什么意思?严格相等?或在某些数字内相等?或在固定精度内相等?或可以相互四舍五入的数字?请说明
-
请记住:在 javascript 中,每个
Number都是一个 64 位浮点数,因此Number.MAX_SAFE_INTEGER常量表示 JavaScript 中的最大安全整数 (2**53 - 1)。 编辑:因此,如果您以相同的方式计算和舍入它们,则只能检查两个浮点数的“相等”。当您拥有真正的 int 时,您将拥有咒语:只存储 x 数量的 LSB,而使用浮点数时,您只需要存储前 53 个 MSB 的咒语(其余的被丢弃)。 -
@GitaarLAB 很好的答案!
标签: javascript math int comparison-operators