【问题标题】:Convert string to decimal in C# not working在C#中将字符串转换为十进制不起作用
【发布时间】:2015-03-06 21:10:17
【问题描述】:

我需要将字符串转换为十进制。

我很困惑为什么它不起作用

public ActionResult Test(){
            decimal result;
            bool o = decimal.TryParse("-2,366.15", out result);//false
            //decimal c = decimal.Parse("2,366.15", NumberStyles.AllowThousands,new CultureInfo("en-US"));

            var info = new CultureInfo("en-US");
            bool r = decimal.TryParse("2,366.15", 0, CultureInfo.CurrentCulture, out result);//false
            bool t = decimal.TryParse("2,366.15", 0, info, out result);//false
            bool e = decimal.TryParse("2,366", 0, info, out result);//false
            bool f = decimal.TryParse("-2366.15", 0, info, out result);//false
            bool h = decimal.TryParse("2366", 0, info, out result);//true
            bool h2 = decimal.TryParse("2366,15", 0, info, out result);//false
            bool h3 = decimal.TryParse("2366.15", 0, info, out result);//false

            bool g = decimal.TryParse("2,366.15", 0, CultureInfo.GetCultureInfo("en-US"), out result);//false
            bool b = decimal.TryParse("2.366,15", out result);//true
}

b 和 h 为真;

我正在开发欧洲版本的 IIS,因此读取 b 没有问题。

但是,我正在尝试转换“2,366.15”,这是美国对数字使用小数和逗号的方式。为什么在上面的所有排列中添加文化信息都不起作用?

发送

【问题讨论】:

    标签: iis decimal cultureinfo


    【解决方案1】:

    我使用 Convert 将字符串转换为十进制或其他数值,所以为了支持国际格式,我使用了这个,

      Convert.ToInt32("56789"   , CultureInfo.InvariantCulture);
      Convert.ToDouble("222,034", CultureInfo.InvariantCulture);
    

    试试

    decimal.TryParse("2,3655.15", CultureInfo.InvariantCulture);
    

    【讨论】:

      【解决方案2】:

      想通了。它不接受 0 作为 numberstyles 的输入

      bool f = decimal.TryParse("-2366.15", NumberStyles.Number, info, out result);//false

      【讨论】:

        猜你喜欢
        • 2022-07-22
        • 2016-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 2018-01-31
        相关资源
        最近更新 更多