1

非常に大きな double 値を解析すると、間違った値が返されます。

例えば

Double.Parse("987654321098765432109876543210987.99") 

を返しますが9.8765432109876547E+32、これは間違っています。これをどのように処理しますか?

上記の値をカンマ区切りで Web ページに表示したいと考えています。親切に助けてください。

4

3 に答える 3

4

に変換する場合は、フォーマットを指定する必要があります。デフォルトでは、大きな数には科学表記法が使用されますが、これは公開 Web サイトには最適な選択ではありません。例で使用しましたが、 msdnを読んで、ニーズに最も適した形式を見つけることを検討してくださいdoublestringF

var str = Double.Parse("987654321098765432109876543210987.99").ToString("F");

Console.WriteLine (str);

版画

987654321098765000000000000000000.00
于 2013-03-20T10:07:01.450 に答える
3

大きな整数

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 未満の場合は、先頭にゼロを挿入する必要がある場合があります。

于 2013-03-20T10:32:45.737 に答える
2

カスタムフォーマットを使用できます

Double.Parse("987654321098765432109876543210987.99").ToString("0,0.00")

出力:"987,654,321,098,765,000,000,000,000,000,000.00"

このユーティリティをダウンロードして、さまざまな形式をテストすることもできます

于 2013-03-20T10:47:59.373 に答える