Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 小数和逗号解析失败_C#_Parsing - Fatal编程技术网

C# 小数和逗号解析失败

C# 小数和逗号解析失败,c#,parsing,C#,Parsing,当我尝试这一行时: float f = float.Parse(val, System.Globalization.NumberStyles.AllowDecimalPoint | System.Globalization.NumberStyles.AllowThousands); 其中val是设置为“5.267”且不带引号的字符串,我得到以下错误: FormatException:未知字符:。 System.Double.Parse(System.String s、NumberStyles样

当我尝试这一行时:

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样式)

因此,我尝试将小数点改为逗号,如:5267,但出现以下错误:

FormatException:未知字符:, System.Double.Parse(System.String s、NumberStyles样式、IFormatProvider) System.Single.Parse(System.String s,NumberStyles样式)


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

Parse有文化意识。如果您的本地区域性有不同的要求,则您可能希望在中传递区域性或其他格式提供程序。尝试使用
CultureInfo.InvariantCulture
。如果需要,则不需要十进制选项

float f = float.Parse(val,
                      System.Globalization.NumberStyles.AllowThousands,
                      CultureInfo.InvariantCulture);
使用系统;
使用System.Collections.Generic;
利用制度全球化;
名称空间控制台EApp2
{
班级计划
{
静态void Main(字符串[]参数)
{
var numList=newlist(){“0”、“-6e-5”、“78.56238”、“05.56”、“0.5E9”、“-45000.56”、“0.56”、“10.4852,64”};
numList.ForEach(num=>
{
//如果我们使用NumberStyles.Float=>-45000.56是无效的
if(decimal.TryParse(num,NumberStyles.Any,CultureInfo.InvariantCulture,out decimal结果))
{
控制台写入线(结果);
}
其他的
{
Console.WriteLine(num+“不是有效数字”);
}
});
}
}
}

float.Parse(你的值)为什么不做呢?我刚刚运行了它,没有发现逗号或小数点
数字样式的错误。任何
都适合我,你试过了吗?在你当前的文化中,
可能都不是小数点或千位分隔符吗?@TimGoodman我不知道为什么,但看起来是这样的。我和达摩克利斯有同样的问题。当我使用CurrentCulture时,它不会用小数点进行解析。这就是我需要的不变量Culture。谢谢马特。这就是我一直在寻找的答案!谢谢!哥们,如果我用英语编码,我会用英语。“小数不是欧洲的”,但谢谢你,伙计,你的答案是正确的best@Squareroot-这与你所用的语言无关。这与解释字符串内容的语言有关。您可能正在编写C#,使用英语关键字和句点来表示文字中的小数,但这并不意味着您的用户一定会说英语。而且,在现实生活中,不仅仅是关于使用哪种分隔符的语言,还有位置。请看,请尝试更清楚地解释为什么这是问题的答案。
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");
                }
            });

        }
    }
}