强制 .Net 程序使用“.”作为十进制符号

Force .Net program to use '.' as decimal symbol

我正在尝试从 COM 端口获取字符串格式的浮点数(例如“3.14”)。

我使用了 Convert.ToSingle() 但它抛出异常 "Input string was not in a correct format" 在调试时,我发现双精度数、浮点数和十进制数是用“/”而不是“.”分隔的;例如 3.14 是 3/14.

我的系统语言是英语,但日期和时间格式是波斯语 (Windows 10)。在波斯语中,我们使用 / 而不是 .作为小数点。(3/14 = 3.14)

有什么方法可以使程序独立于系统区域设置并强制它始终使用“.”吗?作为小数点?

使用 Convert.ToSingle 将尝试根据系统的区域设置将对象转换为浮点数,正如您已经注意到的那样。

为了可靠地转换例如美国英语格式的字符串,您可以向该方法提供类型为 IFormatProvider 的附加参数。

string text = "3.5";
IFormatProvider culture = System.Globalization.CultureInfo.GetCultureInfo("en-US");
float number = Convert.ToSingle(text, culture);

存储在 number 中的结果是 3.5,即介于三和四之间的数字,与您的系统设置无关。例如,上面的代码在我的计算机上按预期工作,即使它设置为德国(de-DE)区域,它表示与 3,5.

相同的数字

有关详细信息,另请参阅 documentation of Convert.ToSingle