我需要一些回答的问题,以帮助调试我与全球化/本地化说要离开我,而难倒有一个问题。
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,23
到123
。 当我们的客户支持人员的人告诉他们到小数点更改为.
它工作得很好。 短,使得荷兰用户使用美国文化的电脑(这是他们坚持他们没有)我无法弄清楚这个问题是怎么发生的一些原因。
你是对你的假设。 .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文档 。
该框架将使用当前线程的当前文化为默认如果没有其他的提供。 人们通常会设置在任何合适的文化信息:
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