为什么在 c# 中将字符串转换为浮点数时逗号 (“,”) 消失了

本文关键字:消失了 浮点数 字符串 转换 为什么 | 更新日期: 2023-09-27 17:59:07

目前我正在这样做。

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的,这背后的原因可能是什么。请指教。

为什么在 c# 中将字符串转换为浮点数时逗号 (“,”) 消失了

从第二个 Parse.使用当前区域性中删除InvariantCultureInvariantCulture的小数分隔符是,而不是逗号。您可以使用以下命令进行验证:

CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;

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

在第二个代码片段中,您使用逗号并将其截断,因为它不是InvariantCulture的小数分隔符,同一区域性不能同时使用两个不同的分隔符。

InvariantCulture中,逗号是千位分隔符,对于正确的字符串,解析的结果不能取决于是否存在千位分隔符(1000 和 1,000 是同一数字的两种不同表示形式(。 然而,float.Parse并没有强制要求千位分隔符只在适当的地方使用,它只是完全跳过它。

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