我有一個函式需要找出 3 個數字之間的差異。它們可以作為字串出現,所以我需要使用parseFloat并保留 2 個小數位。當我使用帶有負數的 parseFloat 時,我得到了奇怪的差異。
// This will output -0.004999999999636212
let temp = -8985.69 - -8985.915 - 0.23
console.log(temp);
// But this will output -4.365674488582272e-13
let x = -8985.69
let y = -8985.915
let z = 0.23
let temp2 = parseFloat(x.toFixed(2)) - parseFloat(y.toFixed(2)) - parseFloat(z.toFixed(2))
console.log(temp2);
我正在查看parseFloat 檔案,我看到當遇到無效字符時轉換可能會改變的部分。但是我在這里沒有看到任何錯誤的字符,而且我不明白在任何時候停止決議會如何導致它相等-4.365674488582272e-13
uj5u.com熱心網友回復:
您的第二個數字有三個小數位,您將其設定toFixed(2)為將其值更改為-8985.92. 當我使用.toFixed(3)它時,我會得到您正在尋找的第一個結果。
uj5u.com熱心網友回復:
y = -8985.915
y.toFixed(2) => -8985.92
uj5u.com熱心網友回復:
你需要閱讀 David Goldberg 1991 年的論文,What Every Computer Scientist should Know About Floating-Point Arithmetic
并訪問此網站:每個程式員都應該了解的關于浮點運算的知識,或者,為什么我的數字不加起來?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360483.html
標籤:javascript 节点.js
