12

当我尝试这条线时:

float f = float.Parse(val, System.Globalization.NumberStyles.AllowDecimalPoint | System.Globalization.NumberStyles.AllowThousands);

其中 val 是设置为“5.267”的字符串,不带引号,我收到此错误:

FormatException:未知字符:。System.Double.Parse(System.String s,NumberStyles 样式,IFormatProvider 提供程序) System.Single.Parse(System.String s,NumberStyles 样式)

所以我尝试将小数点更改为逗号,例如:5,267 并收到此错误:

FormatException: Unknown char: , System.Double.Parse (System.String s, NumberStyles 风格, IFormatProvider 提供者) System.Single.Parse (System.String s, NumberStyles 风格)

我不明白。据我所知,我这样做是对的。这是一件很简单的事情,为什么它让我如此悲伤?

4

2 回答 2

17

Parse 具有文化意识。如果您的本地文化有不同的要求,那么您可能需要传入文化或其他格式提供程序。尝试使用CultureInfo.InvariantCulture. 如果你这样做,你将不需要小数选项。

float f = float.Parse(val,
                      System.Globalization.NumberStyles.AllowThousands,
                      CultureInfo.InvariantCulture);
于 2012-10-17T19:13:44.340 回答
1
using System;
using System.Collections.Generic;
using System.Globalization;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {

            var numList = new List<string>(){"0", "-6e-5", "78.56238", "05.56", "0.5E9", "-45,000.56", "", ".56", "10.4852,64"};
            numList.ForEach(num =>
            {
                // If we use NumberStyles.Float => -45,000.56 is invalid
                if (decimal.TryParse(num, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal result))
                {
                    Console.WriteLine(result);
                }
                else
                {
                    Console.WriteLine(num + " is not a valid number");
                }
            });

        }
    }
}
于 2019-02-07T17:41:52.340 回答