我尝试删除千位分隔符,因此我正在尝试一些代码,但它会抛出异常。我尝试使用Convert.ToDouble
,Convert.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);
答案 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
个数字。