非常に大きな double 値を解析すると、間違った値が返されます。
例えば
Double.Parse("987654321098765432109876543210987.99")
を返しますが9.8765432109876547E+32
、これは間違っています。これをどのように処理しますか?
上記の値をカンマ区切りで Web ページに表示したいと考えています。親切に助けてください。
非常に大きな double 値を解析すると、間違った値が返されます。
例えば
Double.Parse("987654321098765432109876543210987.99")
を返しますが9.8765432109876547E+32
、これは間違っています。これをどのように処理しますか?
上記の値をカンマ区切りで Web ページに表示したいと考えています。親切に助けてください。
に変換する場合は、フォーマットを指定する必要があります。デフォルトでは、大きな数には科学表記法が使用されますが、これは公開 Web サイトには最適な選択ではありません。例で使用しましたが、 msdnを読んで、ニーズに最も適した形式を見つけることを検討してくださいdouble
string
F
var str = Double.Parse("987654321098765432109876543210987.99").ToString("F");
Console.WriteLine (str);
版画
987654321098765000000000000000000.00
double
は精度が限られているため、番号の最初の 15 ~ 16 桁のみが保存されます。精度を高めるSystem.Numerics.BigInteger
には、非整数をサポートしていないため、小数点を自分で追加する必要があります (小数点以下の桁数が固定されている場合)。
BigInteger 構造体
.NET フレームワーク 4.0+
任意の大きさの符号付き整数を表します。
(出典: http://msdn.microsoft.com/en-us/library/dd268287%28v=vs.99%29.aspx )
関連する機能:
パース
数値の文字列表現を対応する BigInteger に変換します。
名前空間: System.Numerics
アセンブリ: System.Numerics (System.Numerics.dll 内)
public static BigInteger Parse(string value)
(出典: http://msdn.microsoft.com/en-us/library/dd268231%28v=vs.100%29.aspx )
例:
import System.Numerics.BigInteger;
BigInteger.Parse("98765432109876543210987654321098999").ToString(); // note, no dot
System.Numerics アセンブリも参照する必要があります。
数値に一定量の小数が必要な場合は、固定小数点演算と I/O を自分で実装できます。この例では、小数点以下 2 桁を使用しますが、これは簡単に変更できます。
重要なのは、元の数ではなく、その倍数で機能することです。たとえば、番号が の場合、X
内部的には次のように表されます。X * 100
足し算と引き算はそのままで動作します。数値 X、Y、Z、およびそれらの内部表現を考えてみましょう。
X + Y = Z
X*100 + Y*100 = Z*100
どちらの式も正しいです。
掛け算と割り算には算数が必要です。乗算の前の例を変更してみましょう。
X * Y = Z
(X*100) * (Y*100) = Z*100 <--- WRONG
方程式を多少変更する必要があります。
X * Y = Z
(X*100) * (Y*100) = Z*100*100
Z * 100 = (X*100) * (Y*100) / 100
したがって、正しい内部表現を得るには、結果を 100 で割る必要があります。除算では、両方のオペランドにそれぞれ 100 を掛ける必要があります。
入力に常に 2 桁の 10 進数が含まれる場合は、小数点を削除して数値の内部表現を取得できます。自由形式の入力には、より多くの作業が必要です。
出力では、正しい入力を得るために最後の 2 桁の前に小数点を挿入する必要があります。さらに、数値が 0 未満の場合は、先頭にゼロを挿入する必要がある場合があります。
カスタムフォーマットを使用できます
Double.Parse("987654321098765432109876543210987.99").ToString("0,0.00")
出力:"987,654,321,098,765,000,000,000,000,000,000.00"