2

decimal以前はとの値の違いを理解していると思ってdoubleいましたが、今ではこのコード スニペットの動作を正当化できません。

たとえば、次のように、2 つの 10 進数の差をいくつかの間隔で割る必要があります。

decimal minimum = 0.158;
decimal maximum = 64.0;
decimal delta = (maximum - minimum) / 6; // 10.640333333333333333333333333

次に、間隔を逆の順序で作成しますが、最初の結果はすでに予想外です。

for (int i = 5; i >= 0; i--)
{
   Interval interval = new Interval(minimum + (delta * i), minimum + (delta * (i + 1));
}

{53.359666666666666666666666665, 63.999999999999999999999999998}

最大値は正確に 64 であると予想します。ここで何が欠けていますか?

どうもありがとうございました!

編集:double代わりに使用するdecimalと、正しく動作するようです!

4

2 に答える 2

0

Double の精度は 16 桁ですが、Decimal の精度は 29 桁です。したがって、double は、decimal よりも丸められる可能性が高いです。

于 2013-05-03T09:18:28.850 に答える