【问题标题】:System.Convert.ToSingle() Problems, (1.5) vs (1,5)System.Convert.ToSingle() 问题,(1.5) 与 (1,5)
【发布时间】:2012-06-15 21:04:25
【问题描述】:

我正在用 C# 编写程序,用于在模型格式之间进行转换。 模型格式有数字作为文本,如“-0.136222”。

我可以使用 System.Convert.ToSingle() 将其转换为浮点数。但是在德国,我们使用逗号作为小数点 (-0,136222),System.Convert 采用了这一点。现在我遇到了它无法识别小数点的问题,因为它需要逗号。

简而言之; 我们有这个:“-0.136222” 我们得到这个:-0136222.0f 因为它期望这个:“-0,136222”

我可以告诉系统仅将逗号识别为我的程序的小数点吗?解决方法是行不通的,因为它需要可移植(到其他国家/地区)。

【问题讨论】:

  • 不是本地化问题,是国际化问题。本地化标签在这里无关紧要。
  • 呃,它需要可移植,但数据格式错误。当用户居住在美国时,它会有逗号吗?您需要一个配置选项。

标签: c# string localization floating-point


【解决方案1】:

改为使用 Single.Parse(),如下所示:

Single.Parse("-0.136222", CultureInfo.InvariantCulture);

InvariantCulture 是告诉方法解析字符串忽略特定区域设置的小数和分组分隔符的方法。

【讨论】:

    【解决方案2】:

    保持原样。安装在客户计算机上的 .Net 框架将自动选择正确的方法来解析计算机所在国家/地区设置的数据为。例如,在欧洲大陆,它会使用逗号解析您的float,但在美国、英国和其他我们使用小数点的地方,它会使用小数点解析数据。

    当然,您可以使用CultureInfo.InvariantCulture(如Pawel 建议的那样)或任何其他CultureInfo 覆盖.Net 的Culture 特定本地化功能,但这意味着您必须针对每个国家/地区专门设置它你把你的软件卖给。让框架为您完成工作要好得多:)


    注意: 这也意味着一个(比如说)德国人在美国工作,他的 PC 被设置为德国本地化,他的floats 将用逗号解析,正如他所期望的那样,而不是因为他位于美国而使用小数点。

    【讨论】:

    • 对不起,我可能让自己不清楚。这正是我的问题,.NET 为我选择。模型文件格式始终以小数位为点,这在美国很好用,但在德国不行。
    • @Hannesh:抱歉,我以为你是在接受用户输入而不是读取文件。
    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 2011-08-02
    • 2017-01-16
    • 2019-03-24
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多