5

我尝试删除千位分隔符,所以我正在尝试一些代码,但它会抛出异常。我试过了Convert.ToDoubleConvert.ToDecimal等等。

它说:

Convert.ToDouble("1.234,45") 抛出和异常 'System.FormatException'

转换是从以下行抛出的:Convert.ToDouble()

该参数n2使用 culturinfo,但我也尝试了“0.00”两者都抛出相同的异常

整个想法是:如何删除千位分隔符,我的输入始终采用这种格式:1.234,54(逗号作为十进制,点作为千位分隔符)......我喜欢在 Textbox GotFocus Event 中使用它......所以格式应该显示为 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);

失败的是第一行,而不是第二行……在第一行中,它将使用当前的线程文化。

我建议您Double.Parse改用,并在那里指定格式。(您可以Convert.ToDouble改用,但我通常更喜欢特定于类型的Double.Parseetc 调用。这意味着如果您移至 etc 则更改更少TryParse。)

如果确切的数字很重要,您应该考虑使用decimal而不是。double例如,如果这是一个货币值,它在逻辑上更像是一个decimal数字而不是一个double数字。

于 2013-03-21T11:04:07.663 回答