在CTYPE及的ToString的本地化/全球化问题(Questions on localizati

2019-10-20 06:13发布

我需要一些回答的问题,以帮助调试我与全球化/本地化说要离开我,而难倒有一个问题。

1)究竟如何CType工作,如果我将字符串转换为双当谈到全球化/本地化?

从我的研究,并要求其他开发人员在办公室里,我觉得应该CTYPE使用您的计算机上的任何区域性设置。 因此,例如CType("1.23", Double)会工作得很好了美国文化的电脑。 但它会弄乱通过将其转换到123上说,其中荷兰的文化的电脑,是公认的小数点. 是公认的千个分隔符。 但是,如果字符串是1,23 ,那么它会正常工作荷兰计算机上,并成为123美国计算机上。

2)怎样.ToString工作,如果我抢了许多,说doubleNumber.ToString将其转换为字符串?

从这里我的经验,我99.9%肯定不应该有千位分隔符包括在内,所以像一些1,234.56就会变成1234.56美国的计算机上,是否正确? 和荷兰文化计算机数量将成为1234,56因为,是小数位,对不对?

3)是否有一个荷兰文化的计算机上的方式CType(#, Double).ToString上双能以某种方式搞砸了,并开始认识. 作为小数点分隔符,而不是一个,像荷兰的文化应该承认?

底线:项目#3是在那里我有我的问题。 我的用户,美国和外国的99.9%,可没有任何本地化问题运行我的软件罚款。 但在荷兰用户上报的臭虫从导入数txt文件,不知何故被转换1,23123 。 当我们的客户支持人员的人告诉他们到小数点更改为. 它工作得很好。 短,使得荷兰用户使用美国文化的电脑(这是他们坚持他们没有)我无法弄清楚这个问题是怎么发生的一些原因。

Answer 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文档 。



Answer 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



文章来源: Questions on localization/globalization of Ctype & .ToString