如何将“12,4”转换为十进制en-Us文化

时间:2011-12-01 13:00:33

标签: c# cultureinfo

我有一个十进制值(“133,3”)存储在挪威文化数据库的字符串列中。

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

C#应用程序中有没有最好的方法来处理这种情况?

的问候, 阿南德

7 个答案:

答案 0 :(得分:17)

无论系统文化如何,如果您指定CultureInfo.InvariantCulture无法<133>将“133,3”解析为133.3。美国英语也是如此。

可以在解析值时指定一个挪威文化(使用decimal.TryParse的重载,它需要IFormatProvider),或者(最好)更改字段中的字段数据库反映实际数据类型(十进制数)。

答案 1 :(得分:9)

你是否提到了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();
      }                     
   }
}

答案 2 :(得分:5)

如果你知道在保存值时使用的文化,你可以在解析它时使用它,即:

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

当然,您可能最好更改数据在数据库中的存储方式,以使用某种形式的浮点数。

答案 3 :(得分:5)

Convert.ToDouble(textBox2.Text, new CultureInfo("uk-UA")).ToString(new CultureInfo("en-US"));

答案 4 :(得分:2)

这解决了您的问题:.ToString(New CultureInfo(“en-US”))

答案 5 :(得分: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);
    }

答案 6 :(得分:0)

希望有帮助

double _number = 12536,8;

CultureInfo usCulture = new CultureInfo("en-US");

return _number.ToString("N", us);