为何JavaScript中两位小数乘100有时得非整数?求解决方案
JavaScript小数乘100出现精度误差的原因与解决办法
原因
JavaScript使用IEEE 754双精度浮点数存储所有数值,而十进制里的很多小数(比如0.01、0.02这类)无法用二进制浮点数精确表示,只能存储一个近似值。当你把这类近似值的两位小数乘以100时,原本被隐藏的微小误差就会被放大,导致结果出现多余的小数位。
比如4.98在内存里实际存储的是一个接近4.98但略大于它的近似值,乘以100后,这个微小的偏差就变成了0.00000000000006,最终得到498.00000000000006;而像4.55这类小数,刚好能被二进制浮点数精确表示,所以乘100后得到准确的整数455。
解决办法
这里有几种实用的处理方式,根据你的场景选择:
字符串转整数法:直接把小数转成字符串,去掉小数点后转成数字,完全绕开浮点数运算:
const num = 4.98; const result = parseInt(num.toString().replace('.', ''), 10); // 498四舍五入取整:用
Math.round()把运算结果四舍五入到最近的整数,适合不需要绝对精确但要整数结果的场景:const result = Math.round(4.98 * 100); // 498固定小数位后转数字:用
toFixed(0)先把结果格式化为0位小数的字符串,再转成数字:const result = Number((4.98 * 100).toFixed(0)); // 498BigInt精确运算:如果涉及金额、财务这类需要绝对精确的场景,建议把数值转成最小单位(比如分)用BigInt处理:
// 直接从字符串转成BigInt(避免浮点数初始化的误差) const numStr = '4.98'; const result = BigInt(numStr.replace('.', '')); // 498n
内容的提问来源于stack exchange,提问作者Nadine Schneider
相关产品推荐
相关产品推荐

