目前我正在这样做。
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,5
和strComma: 125
。
strComma
必须是12.5
?这可能是背后的原因。请指教。
答案 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()”会将“,”视为组分隔符而不是小数分隔符,即“。” 因此,在这种情况下,组分隔符将始终在所提及的输出中消失。