Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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# 为什么在将字符串转换为浮点时会出现FormatException?_C#_String_Exception_Floating Point - Fatal编程技术网

C# 为什么在将字符串转换为浮点时会出现FormatException?

C# 为什么在将字符串转换为浮点时会出现FormatException?,c#,string,exception,floating-point,C#,String,Exception,Floating Point,当我尝试将字符串转换为浮点时: Console.WriteLine(float.Parse("6.59")); 它抛出一个异常: 未处理的异常:System.FormatException:输入字符串的格式不正确 ormat. 在System.Number.ParseSingle(字符串值、NumberStyles选项、NumberFormat 信息(numfmt) 当我这样尝试时: Console.WriteLine(Convert.ToSingle("6.59")); float.Par

当我尝试将字符串转换为浮点时:

Console.WriteLine(float.Parse("6.59"));
它抛出一个异常:

未处理的异常:System.FormatException:输入字符串的格式不正确 ormat.
在System.Number.ParseSingle(字符串值、NumberStyles选项、NumberFormat 信息(numfmt)

当我这样尝试时:

Console.WriteLine(Convert.ToSingle("6.59"));
float.Parse("6.59", CultureInfo.InvariantCulture)
它抛出相同的异常:

未处理的异常:System.FormatException:输入字符串的格式不正确 ormat.
在System.Number.ParseSingle(字符串值、NumberStyles选项、NumberFormat 信息numfmt)
at System.Convert.ToSingle(字符串值)


您能解释一下为什么会发生这种情况吗?

区域设置/区域性可能有问题。您需要为小数分隔符设置
,而不是

您可能正在使用使用
作为小数分隔符的区域性

您可以尝试使用:


单参数解析方法使用当前区域性来解析字符串。如果当前区域性使用其他小数分隔符,则此操作将失败

尝试使用不变区域性:

float.Parse("6.59", CultureInfo.InvariantCulture)

文化特有的东西。你的默认文化是什么? 有些文化使用“,”而不是“.”。您可以尝试以下方法:

float.Parse("6.59", CultureInfo.InvariantCulture);

这里的问题是你的文化

如下所示设置不变区域性:

Console.WriteLine(Convert.ToSingle("6.59"));
float.Parse("6.59", CultureInfo.InvariantCulture)
或者为您的区域性使用正确的小数分隔符

float.Parse("6,59")
我想知道你为什么使用文字字符串。如果在输入文字浮动时遇到问题,可以使用

Console.WriteLine(6.59f)

如果您这样做,则区域性并不重要,因为值是在编译时确定的

您也可以尝试转换类来执行此任务


转换为特定(“6.59”)

我知道这里的每个人都已经给出了出现问题的原因,但也许有人应该进一步说明为什么不变量可以解决这个问题

CultureInfo类由格式化、解析或操作区域性特定数据的类直接或间接使用,例如String、DateTime、DateTimeOffset和数字类型,以处理不同区域性编写这些类型的方式的差异

对于十进制类型,一些区域性使用句点(.),而其他区域性使用逗号(,)。默认情况下,当您使用转换库时,它将使用您的本地区域性(即您的操作系统要配置的国家)

通过指定不变量,您可以说您希望千个分隔符是逗号(,),十进制除数是句点(.),就像在大多数文化中一样

有时会发生的一个大问题是,从操作系统的角度来看,这些文化习俗会发生变化。例如,南非(ZA)文化信息过去的行为类似于不变文化。微软在Windows 8中改变了这一点,十进制突然变成逗号,千位分隔符变成空格。这导致许多用.Net编写的旧系统在迁移到较新的操作系统时突然崩溃


最后,deal将所有本地文化信息规范化为不变和持久化,并以这种格式在业务逻辑中处理它们。然后将其放回前端。DateTime也是如此,请尽快转换为UTC,并且仅在呈现输出时返回。

您是否尝试过将代码拆分为单独的行并在调试器上执行?葡萄牙语更糟糕。这里的
是数字组分隔符(也称为千位分隔符)。因此,
float.Parse(“6.59”)
不会失败,但结果是
659
。这在过去浪费了我几个小时:(英国也是欧洲!(我假设文字字符串是试图找到“复制问题的最简单代码”的结果。)该死的英制单位!去公制!(开玩笑)我忘了英国仍然使用英制:)但我的观点仍然站得住脚,如果他要将字符串文本放入
float.Parse
中,那他完全错了。+1对于这个有用的技巧,我的代码是在我的开发环境中工作的,而不是在生产环境中工作的。