close

剛剛在算一組數字,全都是兩位小數的加法,原本預期是:

6676.18 + 339.37 + 3667.65 + 1204.70 + 4286.02 = 16173.92

但實際計算結果卻令人震驚!

6676.18 + 339.37 + 3667.65 + 1204.70 + 4286.02 = 16173.920000000002

後面的 "0000000002" 哪來的啦!

我以前只在 JavaScript 遇到過,印象中強者我同事有跟我說他踩過這個雷,但是 telegram 和 LINE 的搜尋實在是太令人無言了,翻遍 blog 我竟然沒寫下來,只好摸摸鼻子自己重新搜尋。

原理可參考這幾篇:

最後我選擇用 bcadd 這個 function,它的參數是這樣:

bcadd ( $第一個浮點數, $第二個浮點數, 結果需要的小數位數)

所以我就把我的總合加個零,希望得到正確的 2 位小數:

$total = bcadd(0, $total, 2);

打完收工~

arrow
arrow
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(0) 人氣()