4

ここで C# を使用すると、非常に奇妙な動作が発生します。

float num = 144771463f;
// num is 144771456.0

私も試してみました

float num = Convert.ToSingle(144771463f);
// num is still 144771456.0

なぜそれが起こるのですか?

4

1 に答える 1

7

System.Single型 (floatは の名前エイリアスです)に固有の制限がありますSingle

MSDN ( http://msdn.microsoft.com/en-us/library/system.single.aspx ) によると、Single型には仮数 (仮数とも呼ばれます) 専用の 22 ビットがあり、これらは、値の実際の「数値」 (他の 10 ビットには、正/負の符号と指数が格納されます)。

22ビットは、有効範囲が0- 4,194,304- であることを意味しますが、保存している数値は144,771,463であり、 の(概算)7桁の10進数精度を超える2桁ですSingle。そのため、格納のみが行われ144,771,46Xます (桁の値はX格納されませんが、その大きさは指数領域に格納されます)。

いくつかのオプションがあります:

  1. System.Double51ビットの仮数を提供する用途
  2. 96 ビットの数値情報を提供するために使用します。速度を犠牲にしてより多くの情報を保持する方法で数学演算を特別に処理System.Decimalすることに注意してくださいDecimal(技術的な詳細はわかりません、申し訳ありません)。
于 2014-05-04T08:35:24.293 に答える