你的代碼中出現 -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