【问题标题】:Questions on localization/globalization of Ctype & .ToString关于 Ctype & .ToString 的本地化/全球化的问题
【发布时间】:2014-07-26 15:06:57
【问题描述】:

我需要回答几个问题,以帮助调试我遇到的全球化/本地化问题,这让我很困惑。

1) 在全球化/本地化方面,如果我将字符串转换为双精度字符串,CType 究竟如何工作?

根据我的研究并询问办公室中的其他开发人员,我认为 CType 应该使用您计算机上的任何文化设置。因此,例如CType("1.23", Double) 可以很好地用于美国文化计算机。但是如果在荷兰的文化计算机上将其转换为123 会搞砸,其中, 被识别为小数点,. 被识别为千位分隔符。但是如果字符串是1,23,那么它在荷兰计算机上可以正常工作,在美国计算机上变成123

2)如果我抓取一个数字并说doubleNumber.ToString 将其转换为字符串,.ToString 是如何工作的?

根据我在这里的经验,我 99.9% 确信不应该包含千位分隔符,所以像 1,234.56 这样的数字在美国计算机上会变成 1234.56,对吗?在荷兰文化计算机上,该数字将变为1234,56,因为, 是小数位,对吧?

3) 在荷兰文化计算机上,有没有办法让双精度上的 CType(#, Double).ToString 搞砸并开始将 . 识别为小数分隔符而不是 @ 987654337@像荷兰文化应该承认吗?

底线:第 3 项是我遇到问题的地方。我的 99.9% 的美国和外国用户都可以正常运行我的软件,而不会出现任何本地化问题。但是荷兰的一位用户报告了一个错误,即从txt 文件中导入一个数字会以某种方式将1,23 转换为123。当我们的一位客户支持人员告诉他们将小数点更改为. 时,它工作正常。由于某种原因,缺少该荷兰用户使用美国文化计算机(他们坚称自己不是),我无法弄清楚这个问题是如何发生的。

【问题讨论】:

    标签: .net vb.net localization globalization aspose


    【解决方案1】:

    您的假设是正确的。 .NET 将使用当前计算机的区域性。

    应用特定文化的方法是:

    Dim str As String = "97.9"
    Dim num As Double = Double.Parse(str, Globalization.CultureInfo.InvariantCulture)
    

    将数字转换为字符串也是如此:

    num = 97.9
    str = num.ToString(Globalization.CultureInfo.InvariantCulture)
    

    您可以指定所需的文化,请参阅MSDN Documentation

    【讨论】:

      【解决方案2】:

      如果没有提供其他的,框架将使用当前线程的当前文化作为默认值。通常会在以下任一位置设置适当的文化信息:

      1) 应用程序入口点方法:

      <STAThread()>
      Public Shared Sub Main()
          Thread.CurrentThread.CurrentCulture = New CultureInfo("nb-NO")
          Thread.CurrentThread.CurrentUICulture = New CultureInfo("nb-NO")
          Application.SetCompatibleTextRenderingDefault(False)
          Application.EnableVisualStyles()
          Application.Run(New Form1)
      End Sub
      

      2) 主窗体的构造函数:

      Public Sub New()
          Me.InitializeComponent()
          Thread.CurrentThread.CurrentCulture = New CultureInfo("nb-NO")
          Thread.CurrentThread.CurrentUICulture = New CultureInfo("nb-NO")
      End Sub
      

      您当然可以在成员具有 IFormatProvider 参数时显式设置文化信息:

      1.2R.ToString(New CultureInfo("en-US"))
      

      输出:1.2

      1.2R.ToString(New CultureInfo("nb-NO"))
      

      输出:1,2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 2011-04-26
        • 2011-01-05
        • 2021-11-19
        • 1970-01-01
        相关资源
        最近更新 更多