在C#中解析来自不同文化的数字

Mar*_*tin 6 c# culture

我正在编写一些代码以将字符串解析为双精度型,但是此字符串是从另一台计算机传递给我的。自然会出现文化可能不同的问题。因此,虽然机器A可能发送给我:

"0.5"
Run Code Online (Sandbox Code Playgroud)

机器B可能会寄给我

"0,6"
Run Code Online (Sandbox Code Playgroud)

因为它在德国,有着不同的文化。

正确解析这两个输入的最佳方法是什么?有人建议使用CultureInfo.InvariantCulture作为参数,Convert.ToDouble但这不会仅在生成上述字符串的地方提供帮助,而不是在其他人可以给我发送不同的字符串时提供帮助吗?

我是否认为我Thread.CurrentThread.CurrentCulture在转换之前需要了解原始语言并进行更改以匹配?

Jon*_*nna 2

发送此消息的是机器还是人?如果它是一台机器 - 也就是说,另一台机器上有一个应用程序决定发送哪些数据,而不是“盲目”传输用户输入,那么应该指定此类内容的格式而不是依赖于区域设置。CultureInfo.InvariantCulture一般来说,这意味着如果另一个应用程序不是 .NET,则双方都同意使用或等效的文化。

如果是一个人并且您知道他们的区域设置,那么您可以使用double.Parse(decString, cultureInfo). 如果例如某个说英语的人借用了他们说德语的朋友的计算机,则此操作可能会失败。

如果您知道不会有任何分组分隔符(例如 123,456.78 或 123'457,78),那么您可以使用,double.Parse(decString.Replace(',', '.'), CultureInfo.InvariantCulture)但如果存在分组则不能使用,因为这意味着123,456.78变为123.456.78