C# 强制.Net程序使用'';作为十进制符号

C# 强制.Net程序使用'';作为十进制符号,c#,vb.net,floating-point,globalization,C#,Vb.net,Floating Point,Globalization,我试图从COM端口获取一个字符串格式的浮点数(例如“3.14”) 我使用了Convert.ToSingle(),但它引发了异常“输入字符串的格式不正确”,在调试时,我发现双精度、浮点和十进制数字之间用“/”而不是“.”分隔;例如,3.14是3/14 我的系统语言是英语,但日期和时间格式是波斯语(Windows 10)。在波斯语中,我们用/代替。作为十进制符号。(۳/۱۴=3.14) 有没有办法使程序独立于系统区域设置,并强制它始终使用“.”作为十进制符号?使用转换。正如您已经注意到的,ToSin

我试图从COM端口获取一个字符串格式的浮点数(例如“3.14”)

我使用了
Convert.ToSingle()
,但它引发了异常“输入字符串的格式不正确”,在调试时,我发现双精度、浮点和十进制数字之间用“/”而不是“.”分隔;例如,3.14是3/14

我的系统语言是英语,但日期和时间格式是波斯语(Windows 10)。在波斯语中,我们用/代替。作为十进制符号。(۳/۱۴=3.14)


有没有办法使程序独立于系统区域设置,并强制它始终使用“.”作为十进制符号?

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

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

string text = "3.5";
IFormatProvider culture = System.Globalization.CultureInfo.GetCultureInfo("en-US");
float number = Convert.ToSingle(text, culture);
存储在
number
中的结果应为
3.5
,即介于3和4之间的数字,与您的系统设置无关。例如,上面的代码在我的计算机上按预期工作,即使它被设置为德语(de)区域,这表示与
3,5
相同的数字


有关详细信息,请参见。

如果我理解正确,则包含数字的字符串看起来像
“3/14”
。如果是这样,问题不在于转换或各种解析方法,而在于Arduino程序发送的数据或字符串的解码。也许可以检查Arduino将数字编码为字符串时使用的字符集。更正:仔细阅读您的问题后,Arduino程序似乎使用波斯标准将数字编码为字符串(
/
),而PC端的程序则希望使用英语约定(
)。恰恰相反!Arduino发送24.71,但visual studio需要24/71。问题在于windows区域设置。十进制符号设置为“/”,这会使程序出现问题。我可以更改windows区域设置以自行更正它,但如果用户系统使用“/”怎么办对于像我这样的十进制符号?我希望程序独立于windows区域设置。请尝试以下方法来理解我的问题:
float-example=Convert.ToSingle(“3.14”);
运行正常。现在转到控制面板>时钟和区域>区域>附加设置…并将十进制符号从
更改为
/
。现在代码出错。现在,将“3.14”更改为“3/14”。它再次工作。我仍在等待答案…!正是我所需要的。谢谢!