嗨,伙计们,我的问题是。我用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”),c#可以正确地读取数字。我的问题是:是否有一种方法可以使c#自动识别安装在哪里的pc的“文化”,以便它能够正确地读取数字?
发布于 2015-09-17 07:22:58
是否有一种方法可以使c#自动识别安装在哪里的pc的“文化”,以便它能够正确地读取数字?
这就是默认情况下它所做的事情--以及为什么您会遇到问题,因为用于解析的值("2.3658")所创建的区域性并不是本地机器上的区域性。
对于任何特定的价值,你应该真正知道是哪种文化产生了它。对于机器与机器之间的通信,最好使用与美国相似的不变文化(CultureInfo.Invariant)。理想情况下,您根本不应该以特定于区域性的格式存储值;要么将它们存储在二进制表示中,而不是以字符串的形式存储,或者如果必须存储字符串,则将其视为有效的机对机通信。
如果您处于接收数据的不幸境地,而您知道数据是根据某些人类文化格式化的,但您不知道是哪一种数据,那么您可能应该使用一些启发式方法来检测这种文化是什么。这很容易失败--例如,"1, 234“意味着1后面是”分组“分隔符,然后是234--意思是1,234.还是意味着它是一个1,后面跟着一个小数分隔符,使这个值略高于1?这两种解释都是有效的,取决于你使用的文化.
发布于 2015-09-17 07:18:40
发布于 2015-09-17 07:29:57
乔恩的回答 (和往常一样)很受欢迎。我只想补充一点,如果您正在开发一个将由其他国家的人使用的应用程序,在您处于开发模式时使用CultureInfo.DefaultThreadCurrentUICulture可能会有帮助:在应用程序启动时,只需将您的用户文化分配给这个属性,您将拥有与您的用户完全相同的使用体验(与文化相关的东西)。(只需记住,当您发布应用程序时,要删除它!)例如,您可以使用#if debug块)
https://stackoverflow.com/questions/32624529
复制相似问题