如何将“12,4”转换为十进制en-Us文化
我在挪威文化中的数据库的字符串列中存储了一个十进制值(“133,3”)。
之后,用户将区域设置更改为english-Us。 当我使用CultureInfo.InvariantCulture将“133,3”转换为十进制时,获取无效值或错误。
在C#应用程序中有没有最好的方法来处理这种情况?
问候,阿南德
无论系统文化如何,如果指定CultureInfo.InvariantCulture
您将无法将“133,3”解析为133.3的小数。 美国英语也是如此。
您可以在解析值时指定挪威文化(使用带有IFormatProvider
的decimal.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”))
使用下面的代码来解决我的问题。 我只是硬编码了以前的货币小数部分。 可能不是通用的。 但解决了我的问题。
上述就是C#学习教程:如何将“12,4”转换为十进制en-Us文化分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
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); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1016364.html