我有一个十进制值("133,3")存储在挪威文化中的数据库的字符串列中.
之后,用户将区域设置更改为english-Us.当我使用CultureInfo.InvariantCulture将"133,3"转换为十进制时,获取无效值或错误.
有没有最好的方法来处理C#应用程序中的这种情况?
问候,阿南德
Jon*_*eet 17
无论系统文化如何,如果指定,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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您知道在保留值时使用的区域性,则可以在解析它时使用它,即:
Convert.ToDecimal("133,3", System.Globalization.CultureInfo.GetCultureInfo("no"));
Run Code Online (Sandbox Code Playgroud)
当然,最好更改数据在数据库中的存储方式,以使用某种形式的浮点数。
Convert.ToDouble(textBox2.Text, new CultureInfo("uk-UA")).ToString(new CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36774 次 |
| 最近记录: |