0

重複の可能性:
.Net float から double への変換

私は浮動小数点を理解していましたが、誰かが次のことを説明できますか

float f = 1.85847987E+9F;
double d = Convert.ToDouble(f);

d が として文字列に変換されるようになりました1858479872.0。余分な 2 は、double が浮動小数点数を正確に表すことができないためだと思います。

私の質問は、直接割り当てられたときに同じ番号を再表現できるように見えるのはなぜですか

double d = 1.85847987E+9;

そしてそれは正確に次のように示されます185847987.0

4

3 に答える 3

1

正確に表現doubleできる場合とできないためです。float1.85847987E+9

コンパイラが「float f = 1.85847987E+9F;」について文句を言わない理由 適切に表現できない場合

C# 仕様に従って、セクション 4.1.6 浮動小数点型

代入演算子を含む浮動小数点演算子は、例外を生成しません。

于 2013-01-22T14:20:09.270 に答える
0

符号、仮数、指数以外に浮動小数点が存在するためです。これらの値を抽出する方法については、 Jon Skeet の回答を参照してください。

の場合1.85847987E+9F、仮数は7259687で指数は8です。にmantissa << exponent等しい。1858479872float の精度は7 桁に制限されているため、7桁を超える桁の値は、入力ではなく実装に依存します。と入力することで簡単にテストできます123456789F

于 2013-01-22T14:28:03.320 に答える
0

問題は double ではなく float です。float は 32 ビットに制限されていますが、double は精度のために 64 ビットを使用します。

于 2013-01-22T14:20:12.770 に答える