TypeScript中Number类型变量如何正确去掉小数点完成乘法运算?
问题原因
这是JavaScript采用的IEEE 754双精度浮点数存储标准导致的通用问题。
JS中所有数字都以64位双精度浮点数的形式存储,十进制的有限小数转换为二进制时,很多会变成无限循环小数,存储时会自动截断保留固定精度,导致实际存储的值和字面量的真实值存在微小误差。288.65就是这类无法被二进制精确表示的小数,它的实际存储值本身略小于真实的288.65,乘以100之后误差被放大,就得到了28864.999999999996这个结果。
可用解决方案
- 方案1:通过字符串替换直接去掉小数点,适合所有明确需要移除小数点的场景
function removeDecimal(num) { const numStr = num.toString() return numStr.includes('.') ? Number(numStr.replace('.', '')) : num } // 调用示例:removeDecimal(288.65) 返回 28865
- 方案2:对乘法结果做四舍五入,适合提前知晓小数位数的场景
console.log(Math.round(288.65 * 100)) // 输出 28865
- 方案3:使用toFixed方法处理精度误差后转换为数字
console.log(Number((288.65 * 100).toFixed(0))) // 输出 28865
内容的提问来源于stack exchange,提问作者Vassilis
相关产品推荐
相关产品推荐

