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

本文关键字:quot 十进制 文化 en-Us 何转换 转换 | 更新日期: 2023-09-27 18:16:15

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

在该用户将区域设置更改为english-Us之后。当我使用CultureInfo将"133,3"转换为小数时。

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

问候,Anand

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

无论系统文化如何,如果您指定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);
    }