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
に切り捨てられます。Delphiは乗算時に通貨をどのように丸めますか
私はこれらの計算を40,000持っており、上記以外はすべて正しいです。ここで切り上げ例です:
rate := 32.25;
mod1 := 0.90;
mod2 := 1.15;
これは電卓に33.37875
に等しく、バンカーの丸めによるとデルファイが何をするかである、33.3788
に行くだろう。
デルファイがここで何をしているのか、誰かが明かにすることができますか?
私の推測では、39.4595は浮動小数点では正確に表現できません。丸めには問題はありませんが、表現力はありません。通貨ではなく小数点の演算を使用します。 –
通貨は固定小数点データ型です。 2つの通貨を掛け合わせてもフロートが発生しない限り。 – Chet
@Chet: '通貨'の値は内部的には小数点以下を削除するために10000を掛けた64ビットの整数として格納されますが、 '通貨 'の値で実行される算術はそれらの整数の浮動小数点演算命令を使用します。 –