JavaScript中如何比较大数?为何示例代码判定两数相等?
为什么num1和num2会被判定相等?
JavaScript里的普通数字(Number类型)遵循IEEE 754双精度浮点数标准,它只能精确表示二进制位数不超过53位的整数(对应十进制约16位)。当数字超出这个精度范围时,JS会把它舍入到最近的、能被浮点数表示的值。
你代码里的两个数,十进制位数远超过16位,而且两者的差值(1)远小于当前量级下浮点数的最小精度单位——简单说就是,这两个数在转换成Number时,会被存储成同一个值,所以==比较时会返回true。
如何在JavaScript中正确比较大数?
用ES6引入的BigInt类型,它可以精确表示任意大小的整数:
- 直接在数字末尾加
n定义BigInt:const num1 = 340282000000000000000000000000000000001n const num2 = 340282000000000000000000000000000000000n if(num1 === num2) { console.log('num1 equal to num2'); } else if(num1 > num2) { console.log('num1 bigger than num2'); // 会输出这个结果 } else { console.log('num1 lower than num2') } - 或者用
BigInt()构造函数(注意传入字符串,避免转Number时丢失精度):const num1 = BigInt('340282000000000000000000000000000000001') const num2 = BigInt('340282000000000000000000000000000000000')
注意:BigInt和Number不能直接用==比较(会触发隐式转换导致问题),建议用===严格相等,或者先把其中一方转换成同类型再比较。
内容的提问来源于stack exchange,提问作者Kerwen
相关产品推荐
相关产品推荐

