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

为什么在c#中将字符串转换为浮点时逗号(“,”)会消失。,c#,winforms,parsing,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.Cultu

目前我正在这样做

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
?这背后的原因可能是什么。请告知。

从第二次分析中删除
不变量区域性
。请使用您当前的区域性。
不变量区域性
的小数分隔符是点,而不是逗号。您可以使用以下方法验证:

CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;
在第一个代码段中,您使用点作为分隔符,并使用
InvariantCulture
进行解析,它正确解析,因为InvariantCulture使用点作为分隔符


在第二个代码段中,您使用的是逗号,它被截断,因为它不是
InvariantCulture
的十进制分隔符,同一区域性不能同时使用两个不同的分隔符。

从第二次分析中删除
不变量区域性
。请使用当前区域性。
不变量区域性
的小数分隔符是点,而不是逗号。您可以使用以下方法验证:

CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;
在第一个代码段中,您使用点作为分隔符,并使用
InvariantCulture
进行解析,它正确解析,因为InvariantCulture使用点作为分隔符


在第二个代码段中,您使用的是逗号,它被截断,因为它不是
InvariantCulture
的十进制分隔符,同一个区域性不能同时使用两个不同的分隔符。

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

不变量文化中,逗号是千位分隔符,对于正确的字符串,解析结果不能取决于千位分隔符是否存在(1000和1000是同一个数字的两种不同表示形式)。
float.Parse
,但是,它并不强制要求千位分隔符只在适当的位置使用,它只是完全跳过它。

我认为“float.Parse()”会将“,”视为一个组分隔符,而不是十进制分隔符 因此,在这种情况下,组分隔符在前面提到的输出中总是会消失。

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

这可能是本地化/区域性问题。您的电脑当前设置的区域性将点解释为十进制,但不会以这种方式看到逗号。问题是CultureInfo.InvariantCulture(可能)@RobSmyth的可能重复两个版本都使用
InvariantCulture
,因此它独立于PC设置。这可能是本地化/区域性问题。您的PC当前设置的区域性将点解释为十进制,但不会以这种方式看到逗号。问题是CultureInfo.InvariantCulture(可能)@RobSmyth的可能重复两个版本都使用
不变量文化
,因此它独立于PC设置。没有任何内容被截断。截断会将“12,5”变为12,但会将其变为125。最终用户可以编写或。在文本框
我的代码:
返回float.Parse(prix,System.Globalization.CultureInfo.InvariantCulture);
如何重写我的代码?@Selman22@hvd@robsmything没有被截断。截断会将“12,5”变成12,但会变成125。最终用户可以在文本框
中写入或。我的代码:
返回float.Parse(prix,System.Globalization.CultureInfo.InvariantCulture);
如何重写我的代码?@Selman22@hvd@RobSmyth