关于 Ctype & .ToString 的本地化/全球化的问题

Posted

技术标签:

【中文标题】关于 Ctype & .ToString 的本地化/全球化的问题【英文标题】:Questions on localization/globalization of 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。当我们的一位客户支持人员告诉他们将小数点更改为. 时,它工作正常。由于某种原因,缺少该荷兰用户使用美国文化计算机(他们坚称自己不是),我无法弄清楚这个问题是如何发生的。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于关于 Ctype & .ToString 的本地化/全球化的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于toString()的个人理解

关于toString的一个小问题

JS中 toString() & valueOf()

0607am抽象类&接口&析构方法&tostring&小知识点

关于字符数组cs.toString和new String(cs)的问题

关于ToString重写的问题