大家好我的问题是这个。我在c#中制作了一个能够读取和编辑dxf文件的软件,我必须将这个软件交给一家美国公司,但我发现了以下问题:
我居住的地方使用','将整数部分与数字的小数部分分开(例如:2,3658),但在美国,他们使用'。'所以他们写了2.3658。 当我尝试读取字符串" 2.3658"并使用" Double.Parse(" 2.3658")"将其转换为双精度数。我获得的双倍是23658,就像方法" Parse()"没有认出小数部分。 我找到了以下解决方案:
UpdatedCoorx = double.Parse(shiftedE[w + 1] ,NumberStyles.Number,CultureInfo.CreateSpecificCulture ("en-US"));
使用CultureInfo.CreateSpecificCulture(" en-US")c#可以正确读取数字。 我的问题是:有没有办法让c#自动识别" Culture"安装的电脑,以便它可以正确读取数字???
答案 0 :(得分:3)
有没有办法让c#自动识别安装的电脑的“文化”,以便能正确读取数字?
默认情况下它正在做什么 - 以及为什么你遇到问题,因为用于创建你正在解析的值的文化(“2.3658”)不是你本地机器上的文化。
对于任何特定的价值,你应该真正了解哪种文化产生了它。对于机器到机器的通信,最好使用与美国类似的 的不变文化(CultureInfo.Invariant
)。理想情况下,您不应该以文化特定的格式存储值;要么将它们存储为二进制表示而不是字符串,要么必须存储字符串,请将其视为有效的机器间通信。
如果您处于接收数据的不幸位置,您知道它已根据某些人类文化格式化,但您不知道哪一个,您应该使用一些启发式方法来检测文化是什么。这很容易失败 - 例如,“1,234”意味着是1后面跟着一个“分组”分隔符,接着是234 - 意思是一千二百三十四......或者它意味着是一个1后跟一个小数分隔符,使得该值略大于1?这两种解释都是有效的,取决于您使用的文化......
答案 1 :(得分:0)
如果您想检测Culture
,您应该可以使用this执行此操作
正如link CultureInfo.CurrentCulture
中所述,返回Windows Culture
函数中的GetUserDefaultLocaleName
。
答案 2 :(得分:0)
Jon's answer非常适合(像往常一样)。我只是想补充一点,如果您正在开发一个将由其他国家/地区的人使用的应用程序,那么在您处于开发模式时使用CultureInfo.DefaultThreadCurrentUICulture可能会有所帮助:只需将用户的文化分配给此应用程序启动时的属性,您将拥有与用户完全相同的使用体验(与文化相关的事物)。 (只需记住在发送应用程序时删除它!例如,您可以使用#if debug
块)