[英]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.