我有一个十进制值(“133,3”)存储在数据库的字符串列中,挪威文化中。如何将“12,4”转换为十进制的en-Us文件
之后,用户将区域设置更改为英文 - 我们。当我使用CultureInfo.InvariantCulture将“133,3”转换为十进制时,获取无效值或错误。
是否有任何最好的方法来处理这种情况在C#应用程序?
问候, 阿南德
我有一个十进制值(“133,3”)存储在数据库的字符串列中,挪威文化中。如何将“12,4”转换为十进制的en-Us文件
之后,用户将区域设置更改为英文 - 我们。当我使用CultureInfo.InvariantCulture将“133,3”转换为十进制时,获取无效值或错误。
是否有任何最好的方法来处理这种情况在C#应用程序?
问候, 阿南德
无论系统的文化,如果指定CultureInfo.InvariantCulture
你不会能够解析“133,3”作为小数133.3。美国英语也是如此。
您解析值(使用decimal.TryParse
超载这需要一个IFormatProvider
),或在数据库中(最好)改变字段,以反映真实的数据类型(十进制数)时,可以只指定一个挪威文化代替。
+1,很好的回答 –
+1 - 是的。在向用户传递数据或从用户传递数据时仅使用文化特定的代码,例如通过屏幕,电子邮件,打印等等。数据库中的标准小数点会更好,因为这可以让代码更容易地应对文化变化。 – ChrisBD
如果你知道坚持的价值时是使用的文化,你可以在解析时它,使用它,即:
Convert.ToDecimal("133,3", System.Globalization.CultureInfo.GetCultureInfo("no"));
当然,你可能会更好过改变数据是如何存储在在数据库中,要使用某种形式的浮点数。
你提到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();
}
}
}
使用下面的代码来解决我的问题。我只是硬编码了以前的货币小数部分。可能不是通用的。但解决了我的问题。
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);
}
Convert.ToDouble(textBox2.Text, new CultureInfo("uk-UA")).ToString(new CultureInfo("en-US"));
欢迎来到计算器!提供示例代码的简短说明总是更好,以提高发布准确性:) –
这可以解决你的问题:的ToString(新的CultureInfo( “EN-US”))
你能明确?这是否意味着133小数点3或1333 ...? –
检查这一个以及:在Norwagian文化逗号用作小数点分隔符使用http://stackoverflow.com/questions/831727/c-sharp-decimal-parse-issue-with-commas –
“133,3”。 –