你的代码中出现 -8.881784197001252e-16
(一个极其接近 0 的极小负数)的原因是 JavaScript 浮点数精度问题。具体来说,当你反复进行 加法
和 减法
时,由于浮点数在计算机中的存储方式,可能会引入微小的误差。
一、问题情况示例:
// 示例
totalPrice = 0.00;
totalPrice = totalPrice + parseFloat(data.total); // 假设 data.total = 10.5
totalPrice = totalPrice - parseFloat(data.total); // 预期是 0,但可能是 -8.88e-16
二、解决思路:
改用整数计算(避免浮点数)
例如,如果金额可以用 分(cents) 存储(如 10.5元
→ 1050分
),可以完全避免浮点数问题:
// 所有金额存储为分(整数)
let totalPrice = 0; // 单位:分
let mealPrice = parseFloat(data.total) * 100; // 10.5 → 1050totalPrice += mealPrice;
totalPrice -= mealPrice;// 最终显示时再转回元
console.log(totalPrice / 100); // 0