繁体   English   中英

将字符串转换为浮点数时,为什么会出现FormatException?

[英]Why do I get a FormatException when converting a string to a float?

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

Console.WriteLine(float.Parse("6.59"));

它抛出一个异常:

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

当我这样尝试时:

Console.WriteLine(Convert.ToSingle("6.59"));

它抛出相同的异常:

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

您能解释为什么会这样吗?

单参数Parse方法使用当前区域性来分析字符串。 如果您当前的区域性使用其他十进制分隔符,则将失败。

尝试使用不变文化:

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

这里的问题是你的文化。

设置像这样的不变文化:

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

或为您的文化使用正确的十进制分隔符

float.Parse("6,59")

我想知道为什么您要使用文字字符串。 如果您在输入文字浮点数时遇到问题,可以使用

Console.WriteLine(6.59f)

如果采用这种方式,文化就没有关系,因为价值是在编译时决定的。

您可能正在使用的是使用了一种文化,作为小数分隔符。

您可以尝试使用InvariantCulture进行解析

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

语言环境/文化可能存在问题。 您需要设置,而不是. 小数点分隔符。

文化-特定的事物。 您的默认文化是什么? 有些文化使用“,”代替“。”。 您可以尝试以下方法:

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

我知道这里的每个人都已经给出了遇到此问题的原因,但是也许有人应该就Invariant修复它的原因进行扩展。

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

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

通过指定不变式,您可以说与大多数区域性一样,您希望千位分隔符为逗号(,),十进制分隔符为句点(。)。

有时会发生的一个大问题是,从OS的角度来看,这些文化习俗会发生变化。 例如,南非(ZA)的文化信息过去表现得像不变文化。 微软在Windows 8中对此进行了更改,在Windows 8中,小数点突然变成了逗号,千位分隔符变成了空格。这导致许多用.Net编写的旧系统在将其迁移到较新的操作系统时突然中断。

最后,deal将所有本地文化信息标准化为不变的,并以这种格式在您的业务逻辑中进行处理。 然后将其本地化回前端。 对于DateTime也是如此,尽快转换为UTC,只有在呈现输出时才返回。

您也可以尝试Convert类来执行此任务。

Convert.ToDecimal(“ 6.59”);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM