使用するのに最適なデータ型である 0.000 に続く数値を格納したいと考えています。
ダブル?
また、INTは問題外だと思いますか?
このdecimal
型は、固定小数点演算に最適です。
C# 仕様セクション 4.1.7 から:
float および double データ型とは対照的に、0.1 などの 10 進数の小数は、10 進数表現で正確に表すことができます。float および double 表現では、このような数値は無限小数であることが多く、これらの表現では丸め誤差が発生しやすくなります。
私はまだ10進数のファンです。もう少しスペースがかかるかもしれませんが、floatとdoubleの丸め誤差とまったく同じではありません。
それは、必要な精度と精度、および格納する数値の種類によって異なります。
お金を扱っている場合など、float や real の丸め誤差はおそらく受け入れられないでしょう。
もちろん、必要な値の範囲に応じて完全に固定されている場合は、1000 を掛けて short などの整数型として格納できます。
http://www.yoda.arachsys.com/csharp/floatingpoint.htmlの丸め誤差の例
double a = 0.65d;
double b = 0.05d;
Console.WriteLine("{0:r}", a + b);
{0:r}
.net は値を四捨五入し、正確に 0.7 でなくても 0.7 と表示されます。
数回の計算で、このような丸め誤差が増加する可能性があります。
yopuがファイルサイズを表しているというコメントに基づいて、整数または長整数でバイトを格納することを検討してください...これにより、問題が完全に回避され、KBの1/1024をdoubleまたはfloatに変換する際に固有の丸めエラーが回避され、あなたが表している現実世界の測定に近い。
float は 7 桁の精度です。double は 15 桁の精度です。
フロートで十分です
私のアドバイスは、フロートを使用することです。精度を上げるには double を使用し、さらに精度を上げるには decimal を使用します。
Int はあなたにぴったりです。小数でメモリを浪費します。小数点以下 3 桁のみを使用する場合は、常に 1000 で乗算/除算することを忘れないでください。
とにかく、財務に使用する場合、それは面倒な場合があります-とにかく小数に固執してください.
デュレーションや長さなどのある種の単位に使用する場合、 int は、常に秒からミリ秒、またはメートルからミリメートルに移動できるため、適切に適しています。
希望する用途を説明していただけると助かります。
また、MSDN で見た情報によると、10 進数は浮動小数点と同じですが、精度が高く、丸めがありません。
さらに: decimal - 16 バイト、int - 4 バイト
ただし、int を 1000 で割った値の範囲は +/-2,147,483 のみです。
編集:
あなたのコメントを読みましたが、ファイルサイズの場合に使用しますか? もしそうなら、私は小数がどこから来たのかわかりません...多分それらは表示のためだけですか?
とにかく、ここでは Int64 を使用してください。
float は小数点以下約 6 桁まで「正確」であり、double はより高い精度まで「正確」です。ただし、どちらも小数点以下 3 桁の値を正確に表すことはできません。
0.123 のような数値が 0.122999999 として格納されることを気にしない限り、float を使用しても問題ない可能性があります...必要な結果を得るには、少し慎重に丸めるだけで十分です。
小数点以下 3 桁の可能な分数をすべて正確に表現したい場合は、整数を使用して値に 1000 を掛けた方がよいでしょう。つまり、3.456 の値は 3456 として整数に格納されます。
保存したいファイルサイズについては、long (Int64) を使用してバイト数を保存します。または、ファイルが約 2GB 未満になることがわかっている場合は、int を使用します。次に、単純な方法を使用して、これをより人間が読める形式に変換できます。
フロートのほうがいいです。
ファイルサイズの場合は、サイズをキロバイトからバイトに、またはより小さい範囲 (メガからキロバイト) に変更し、浮動せずに同じ精度を維持することができます。
それ以外の場合は、ダブルが良いでしょう。