如何将“12,4”转换为十进制en-Us文化

我在挪威文化中的数据库的字符串列中存储了一个十进制值(“133,3”)。

之后,用户将区域设置更改为english-Us。 当我使用CultureInfo.InvariantCulture将“133,3”转换为十进制时,获取无效值或错误。

C#应用程序中有没有最好的方法来处理这种情况?

问候,阿南德

无论系统文化如何,如果指定CultureInfo.InvariantCulture将无法将“133,3”解析为133.3的小数。 美国英语也是如此。

可以在解析值时指定挪威文化(使用带有IFormatProviderdecimal.TryParse的重载),或者(最好)更改数据库中的字段以反映实际数据类型(十进制数)。

你是否提到了Convert.ToDecimal() ,它就像是

 using System; using System.Globalization; public class Example { public static void Main() { string[] values = { "123456789", "12345.6789", "12 345,6789", "123,456.789", "123 456,789", "123,456,789.0123", "123 456 789,0123" }; CultureInfo[] cultures = { new CultureInfo("en-US"), new CultureInfo("fr-FR") }; foreach (CultureInfo culture in cultures) { Console.WriteLine("String -> Decimal Conversion Using the {0} Culture", culture.Name); foreach (string value in values) { Console.Write("{0,20} -> ", value); try { Console.WriteLine(Convert.ToDecimal(value, culture)); } catch (FormatException) { Console.WriteLine("FormatException"); } } Console.WriteLine(); } } } 

如果您知道在持久化值时使用的文化,则可以在解析它时使用它,即:

 Convert.ToDecimal("133,3", System.Globalization.CultureInfo.GetCultureInfo("no")); 

当然,您可能最好更改数据在数据库中的存储方式,以使用某种forms的浮点数。

 Convert.ToDouble(textBox2.Text, new CultureInfo("uk-UA")).ToString(new CultureInfo("en-US")); 

这解决了您的问题:.ToString(New CultureInfo(“en-US”))

使用下面的代码来解决我的问题。 我只是硬编码了以前的货币小数部分。 可能不是通用的。 但解决了我的问题。

 public static decimal? ToDecimal1(this string source) { CultureInfo usCulture = new CultureInfo("en-US"); if (string.IsNullOrEmpty(source.Trim1())) return null; else return Convert.ToDecimal(source.Replace(",", ".").Trim(), usCulture); }