如何使用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删除千位分隔符

指定具有转换的区域性,其工作方式如下:

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数字。