1

次の状況を想像してください。金額はループ内の合計に追加されます。

float total = 0;
float[] amounts = new float[]{...};
foreach(float amount in amounts)
{
  total += amount;
}

total、およびすべてamountの がデータベースに書き込まれます。SQL で計算するSUM(amount)と、 とは異なる値になりますtotal。さらに、C# で同じ計算を行うと、今回は double 型の値に金額を加算すると、

double total = 0;
//the rest of the code is the same as above

次にtotal、正しい値を表します。

これは、float と double の精度の違いが原因でしょうか?

値によって異なりますのでご注意ください。この計算結果のほとんど正しいです。

4

2 に答える 2

3

これは、float と double の精度の違いが原因でしょうか?

はい。また、すべての値をIEEE 浮動小数点で表現できるわけではないという理由だけである場合もあります。「正確な」合計 (金額など) が予想される多くのシナリオでは、通常は を使用することをお勧めしますdecimal。ただし、それが「正確」であることを意味すると解釈すべきではありませんdecimal。単純に、丸めの方法が、人間が丸めについて考える方法により適しているということです。

于 2013-06-28T21:29:16.680 に答える
2

はい。SQL Server の float サイズはさまざまですが、データベースには 8 バイトの float が含まれている可能性があります。C# コードで double (8 バイト) を使用すると結果は同じになりますが、float (4 バイト) を使用すると結果は異なります。float の範囲内の double 値は、float 値と同じにはなりません。

于 2013-06-28T21:29:24.853 に答える