5

桁区切り記号を削除しようとしているので、いくつかのコードを試していますが、例外がスローされます。などで試しましConvert.ToDoubleた。Convert.ToDecimal

それは言います:

Convert.ToDouble("1.234,45") がスローされ、「System.FormatException」の例外が発生しました

変換は次の行からスローされます。Convert.ToDouble()

引数n2はculturinfoを使用していますが、「0.00」も試しましたが、どちらも同じ例外をスローします

全体のアイデアは次のとおりです。千の区切り記号を削除する方法、私の入力は常にこの形式です:1.234,54(小数点としてカンマ、千の区切り記号としてドット)...テキストボックスのGotFocusイベントで使用するのが好きなので、形式12345,45 のように表示する必要があります

1.254,45 は 1254,45 で、1.254,00 は 1254,00 です。

 //http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be");
NumberFormatInfo nfi = (NumberFormatInfo)ci.NumberFormat.Clone();
//Now force thousand separator to be empty string
nfi.NumberGroupSeparator = "";
//Format decimal number to 2 decimal places
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("0.00", nfi);
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi);
4

2 に答える 2

6

変換でカルチャを指定すると、次のように機能します。

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be");
double d = Convert.ToDouble("1.234,45", ci);
于 2013-03-21T11:03:57.813 に答える
3

Convert.ToDoubleフォーマットをまったく指定しないというあなたの呼びかけ。これを覚えておく必要があります:

string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi);

と同等です:

double tmp = string decimalFormatted = Convert.ToDouble("1.234,45");
string decimalFormatted = tmp.ToString("n2", nfi);

失敗しているのは最初の行であり、2番目の行ではありません...そして最初の行では、現在のスレッドカルチャを使用するだけです。

Double.Parse代わりに使用して、そこでフォーマットを指定することをお勧めします。(Convert.ToDouble代わりに使用することもできますが、私は通常、よりタイプ固有のDouble.Parseetc呼び出しを好みます。つまり、etcに移動しても変更が少ないことを意味しますTryParse。)

正確な数字が重要な場合は、代わりに使用すること検討する必要があります。たとえば、これが通貨の値である場合、論理的には数値よりも数値です。decimaldoubledecimaldouble

于 2013-03-21T11:04:07.663 に答える