ここで C# を使用すると、非常に奇妙な動作が発生します。
float num = 144771463f;
// num is 144771456.0
私も試してみました
float num = Convert.ToSingle(144771463f);
// num is still 144771456.0
なぜそれが起こるのですか?
ここで C# を使用すると、非常に奇妙な動作が発生します。
float num = 144771463f;
// num is 144771456.0
私も試してみました
float num = Convert.ToSingle(144771463f);
// num is still 144771456.0
なぜそれが起こるのですか?
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
格納されませんが、その大きさは指数領域に格納されます)。
いくつかのオプションがあります:
System.Double
51ビットの仮数を提供する用途System.Decimal
することに注意してくださいDecimal
(技術的な詳細はわかりません、申し訳ありません)。