
差一點點,先別急著判定多扣或少付
自己算的數字和紀錄差了幾分,第一步是確認小數怎麼處理。每筆先四捨五入再相加,和保留原值、加總後才四捨五入,可能得到不同答案。只看到差額,還不知道是哪個環節造成。
這篇只用十進位小數做教學,不代表任何平台實際採用的計算方式。要查真實紀錄,仍需原始金額、幣別或點數單位,以及該筆適用的取整規則。
三筆0.335,為什麼會有1.02和1.01?
假設每筆精確值都是0.335,保留小數兩位,採一般正數「五入」的四捨五入。每筆先取整,0.335會變0.34;三筆合計0.34+0.34+0.34=1.02。
若先把原值相加,0.335×3=1.005,再保留兩位,就是1.01。差0.01來自取整時點不同,不是加法失效。這個例題使用精確十進位值,不把程式二進位小數誤差混進來。

「四捨五入」還要說清楚遇到5怎麼做
有些系統遇到正好一半時,會取最近的偶數;有些直接截去後面的位數。它們和本篇例題的方式不同,不能只因都顯示兩位小數,就認定算法相同。
例如正數0.345取兩位,依一般五入會成0.35;取最近偶數則可能是0.34。Python的Decimal文件就分列不同取整方式。這是說明計算規則的差異,並不是替某個實際差額找理由。
詢問差額時,把問題縮到一筆就好
可以先選一筆已結算紀錄,列出原始值、顯示值、保留幾位、每筆還是總額取整,以及費用是否另外計算。這比只說「總額不對」更容易定位問題。
我會直接問:「這一筆是先算費用再取整,還是先取整再扣費?能否提供適用規則?」如果原始精度或順序缺一項,就先保留差額待查。知道取整可能造成差異,不等於已經證明這筆帳一定正確。
資料參考:Python官方文件:十進位精度與取整模式。
