为什么在c#中将字符串转换为float时,逗号(",")会消失。

时间:2014-04-21 10:40:40

标签: c# winforms parsing

目前我正在这样做。

string strPoint = "12.5";
string strComma = "12,5";

Console.WriteLine("strPoint: " + float.Parse(strPoint,System.Globalization.CultureInfo.InvariantCulture));

Console.WriteLine("strComma: " + float.Parse(strComma,System.Globalization.CultureInfo.InvariantCulture)); 

结果: strPoint: 12,5strComma: 125

strComma必须是12.5?这可能是背后的原因。请指教。

3 个答案:

答案 0 :(得分:4)

从第二个Parse中删除InvariantCulture。使用您当前的文化。InvariantCulture的小数点分隔符是,而不是逗号。你可以验证使用:

CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;

在第一个代码段中,您使用 dot 作为分隔符并使用InvariantCulture进行Parse,并且正确解析,因为InvariantCulture使用点作为分隔符。

在您使用逗号的第二个代码段中,它被截断,因为它不是InvariantCulture的小数分隔符,同一文化不能同时使用两个不同的分隔符

答案 1 :(得分:1)

InvariantCulture中,逗号是千位分隔符,对于正确的字符串,解析的结果不能取决于是否存在千位分隔符(1000和1,000是相同数字的两个不同表示)。但是,float.Parse并未强制千位分隔符仅在适当的位置使用,它只是完全跳过它。

答案 2 :(得分:0)

我认为“fLoat.parse()”会将“,”视为组分隔符而不是小数分隔符,即“。” 因此,在这种情况下,组分隔符将始终在所提及的输出中消失。