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 値が切り捨てられているのはなぜでしょうか?