2

10 進数を倍精度に変換するときに、予期しない切り捨てが発生することがあります。例えば:

        decimal dec = -96.31614743511301m;
        double dbl = Convert.ToDouble(dec);  // dbl = -96.316147435113, why?

他の値の場合、期待どおりに機能します。

        decimal dec2 = -96.269592225955307m;
        double dbl2 = Convert.ToDouble(dec2); // dbl2 = -96.269592225955307, expected

実際に動作する 2 番目の例は、動作しない最初の例よりも小数点以下の桁数が多いことに注意してください。また、次の複雑なコードを使用して、最初の値を double に正常に変換できます。

        dbl = Convert.ToDouble(dec.ToString()); // dbl = -96.31614743511301, expected

では、最初の例で double 値が切り捨てられているのはなぜでしょうか?

4

1 に答える 1

3

Decimal と double は、異なる精度で異なる方法で格納されます...こちらを参照してください - .NET での decimal、float、および double の違い?

于 2012-11-21T22:23:30.050 に答える