如何使用cultureinfo删除千位分隔符
本文关键字:千位 分隔符 何使用 cultureinfo 删除 | 更新日期: 2023-09-27 18:05:10
我试图删除千位分隔符,所以我正在试验一些代码,但它抛出了一个异常。我尝试了Convert.ToDouble
, Convert.ToDecimal
等
上面写着:
Convert.ToDouble("1.234,45")抛出了一个异常。FormatException '
从Convert.ToDouble()
参数n2
使用文化信息,但我也尝试了"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);
指定具有转换的区域性,其工作方式如下:
CultureInfo ci = CultureInfo.GetCultureInfo("NL-be");
double d = Convert.ToDouble("1.234,45", ci);
对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
数字。