强制 .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
。
我正在尝试从 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
。