如何转换“12,4”"将en-Us文化十进制
本文关键字:quot 十进制 文化 en-Us 何转换 转换 | 更新日期: 2023-09-27 18:16:15
我有一个十进制值("133,3")存储在数据库的字符串列中,在挪威文化中。
在该用户将区域设置更改为english-Us之后。当我使用CultureInfo将"133,3"转换为小数时。
在 c# 应用程序中是否有最好的方法来处理这种情况?问候,Anand
无论系统文化如何,如果您指定CultureInfo.InvariantCulture
,则将无法将"133,3"解析为十进制到133.3。美式英语也是如此。
您可以在解析值时指定挪威文化(使用decimal.TryParse
的重载,它接受IFormatProvider
),或者(最好)更改数据库中的字段以反映实际数据类型(十进制数字)。
你引用了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"));
当然,您最好改变数据在数据库中的存储方式,使用某种形式的浮点数
Convert.ToDouble(textBox2.Text, new CultureInfo("uk-UA")).ToString(new CultureInfo("en-US"));
这就解决了你的问题:.ToString(New CultureInfo("en-US"))
希望对大家有所帮助
double _number = 12536,8;
CultureInfo usCulture = new CultureInfo("en-US");
return _number.ToString("N", 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);
}