2011-12-01 34 views
4

我有一个十进制值(“133,3”)存储在数据库的字符串列中,挪威文化中。如何将“12,4”转换为十进制的en-Us文件

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

是否有任何最好的方法来处理这种情况在C#应用程序?

问候, 阿南德

+0

你能明确?这是否意味着133小数点3或1333 ...? –

+0

检查这一个以及:在Norwagian文化逗号用作小数点分隔符使用http://stackoverflow.com/questions/831727/c-sharp-decimal-parse-issue-with-commas –

+0

“133,3”。 –

回答

13

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

解析值(使用decimal.TryParse超载这需要一个IFormatProvider),或在数据库中(最好)改变字段,以反映真实的数据类型(十进制数)时,可以只指定一个挪威文化代替。

+0

+1,很好的回答 –

+3

+1 - 是的。在向用户传递数据或从用户传递数据时仅使用文化特定的代码,例如通过屏幕,电子邮件,打印等等。数据库中的标准小数点会更好,因为这可以让代码更容易地应对文化变化。 – ChrisBD

3

如果你知道坚持的价值时是使用的文化,你可以在解析时它,使用它,即:

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

当然,你可能会更好过改变数据是如何存储在在数据库中,要使用某种形式的浮点数。

8

你提到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(); 
     }      
    } 
} 
0

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

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); 
    } 
3
Convert.ToDouble(textBox2.Text, new CultureInfo("uk-UA")).ToString(new CultureInfo("en-US")); 
+0

欢迎来到计算器!提供示例代码的简短说明总是更好,以提高发布准确性:) –

1

这可以解决你的问题:的ToString(新的CultureInfo( “EN-US”))

相关问题