rate : Currency;
mod1 : Currency;
mod2 : Currency;
mod_rate : Currency;
rate := 29.90;
mod1 := 0.95;
mod2 := 1.39;
mod_rate := rate * mod1 * mod2;
如果您在計算器上執行此計算,您將得到一個值39.45295
。由於Delphi的Currency
數據類型僅精確到4位小數,因此它在內部舍入值。我的測試表明它使用Banker的四捨五入,因此mod_rate應該包含值39.4530
,但是在這種特殊情況下,它會截斷爲39.4529
。德爾福如何在乘法運算中循環貨幣
我有40,000這些計算,除了上面所有都是正確的。下面是圍捕的例子:
rate := 32.25;
mod1 := 0.90;
mod2 := 1.15;
這在計算器上等於33.37875
並根據銀行家舍入將歸33.3788
,這是德爾福做什麼。
難道有人會對德爾福在這裏做的事情有所瞭解嗎?
我的猜測是39.4595在浮點上不能完全表示。四捨五入沒有錯,但具有可代表性。使用十進制算術代替貨幣。 –
貨幣是一個固定點數據類型。除非乘以兩個貨幣產生浮動。 – Chet
@Chet:'貨幣'值在內部存儲爲64位整數,乘以10000以除去小數,但對「貨幣」值執行的數學運算使用這些整數上的浮點數學指令。 –