如何使用cultureinfo删除千位分隔符?

时间:2013-03-21 11:01:08

标签: c# winforms formatting string-formatting cultureinfo

我尝试删除千位分隔符,因此我正在尝试一些代码,但它会抛出异常。我尝试使用Convert.ToDoubleConvert.ToDecimal等。

它说:

  

Convert.ToDouble(“1.234,45”)抛出'System.FormatException'的异常

转换是从行Convert.ToDouble()

开始的

参数n2使用culturinfo,但我也试过“0.00”都抛出相同的异常

整个想法是:如何删除千位分隔符,我的输入始终采用以下格式:1.234,54(逗号为十进制,点为千分隔符)...我喜欢在Textbox 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);

2 个答案:

答案 0 :(得分:6)

使用转化指定文化,它的工作方式如下:

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be");
double d = Convert.ToDouble("1.234,45", ci);

答案 1 :(得分: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.Parse等调用。这意味着如果您转移到TryParse等,则更改的内容会更少。)

如果确切的数字很重要,您会考虑使用decimal代替double。例如,如果这是一个货币值,则逻辑上更多的是decimal个数字而不是double个数字。