首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#,我怎样才能正确地读双字串,尽管是数字格式?

c#,我怎样才能正确地读双字串,尽管是数字格式?
EN

Stack Overflow用户
提问于 2015-09-17 07:15:16
回答 3查看 186关注 0票数 0

嗨,伙计们,我的问题是。我用c#制作了一个能够读取和编辑dxf文件的软件,我必须将这个软件交给一家美国公司,但我发现了以下问题:

在我居住的地方,我们使用',‘分隔整数部分和数字的小数部分(例如: 2,3658),但是在美国,它们使用'.’。所以他们写了2.3658。当我试图读取字符串"2.3658“并将其转换为带有"Double.Parse("2.3658")”的双值时,“我得到的双是23658,就像"Parse()”方法没有识别小数部分一样。我找到了以下解决办法:

代码语言:javascript
复制
 UpdatedCoorx = double.Parse(shiftedE[w + 1] ,NumberStyles.Number,CultureInfo.CreateSpecificCulture ("en-US"));

使用CultureInfo.CreateSpecificCulture (“en”),c#可以正确地读取数字。我的问题是:是否有一种方法可以使c#自动识别安装在哪里的pc的“文化”,以便它能够正确地读取数字?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-17 07:22:58

是否有一种方法可以使c#自动识别安装在哪里的pc的“文化”,以便它能够正确地读取数字?

这就是默认情况下它所做的事情--以及为什么您会遇到问题,因为用于解析的值("2.3658")所创建的区域性并不是本地机器上的区域性。

对于任何特定的价值,你应该真正知道是哪种文化产生了它。对于机器与机器之间的通信,最好使用与美国相似的不变文化(CultureInfo.Invariant)。理想情况下,您根本不应该以特定于区域性的格式存储值;要么将它们存储在二进制表示中,而不是以字符串的形式存储,或者如果必须存储字符串,则将其视为有效的机对机通信。

如果您处于接收数据的不幸境地,而您知道数据是根据某些人类文化格式化的,但您不知道是哪一种数据,那么您可能应该使用一些启发式方法来检测这种文化是什么。这很容易失败--例如,"1, 234“意味着1后面是”分组“分隔符,然后是234--意思是1,234.还是意味着它是一个1,后面跟着一个小数分隔符,使这个值略高于1?这两种解释都是有效的,取决于你使用的文化.

票数 3
EN

Stack Overflow用户

发布于 2015-09-17 07:18:40

如果您想检测Culture,您应该能够使用来检测,正如链接 CultureInfo.CurrentCultureGetUserDefaultLocaleName函数返回Culture时所解释的那样。

票数 0
EN

Stack Overflow用户

发布于 2015-09-17 07:29:57

乔恩的回答 (和往常一样)很受欢迎。我只想补充一点,如果您正在开发一个将由其他国家的人使用的应用程序,在您处于开发模式时使用CultureInfo.DefaultThreadCurrentUICulture可能会有帮助:在应用程序启动时,只需将您的用户文化分配给这个属性,您将拥有与您的用户完全相同的使用体验(与文化相关的东西)。(只需记住,当您发布应用程序时,要删除它!)例如,您可以使用#if debug块)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32624529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档