直到最近,我一直认为是 CDbl(x)
VB.NET中的操作本质上是一个强制转换(即,等效于VB的VB) (double)x
在C#);但最近的一项发现显示情况并非如此。
如果我有这个字符串:
Dim s As String = "12345.12345-"
我这样做:
Dim d As Double = CDbl(s)
d
将被设置为值 -12345.12345
!现在,不要误解我的意思,这在我的特定场景中很方便;但我不得不承认我很困惑 为什么 这很有效。特别是,我很困惑,因为:
Double.Parse
不适用于上述输入。
Double.TryParse
不起作用。
Convert.ToDouble
不起作用。
怎么 CDbl
好聪明?
它使用Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble()。该函数在对象的GetTypeCode()返回值上包含一个Select语句,因此它可以根据参数的类型使用自定义转换器。字符串转换器会考虑字符串可能包含货币值的可能性,并对字符串进行一些处理以处理该字符串。一种允许的货币值格式是尾随负号。
这不是特别便宜。实现相同转换的最快方法是:
Dim s As String = "12345.12345-"
Dim d As Double = Double.Parse(s, Globalization.NumberStyles.Any)
它使用Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble()。该函数在对象的GetTypeCode()返回值上包含一个Select语句,因此它可以根据参数的类型使用自定义转换器。字符串转换器会考虑字符串可能包含货币值的可能性,并对字符串进行一些处理以处理该字符串。一种允许的货币值格式是尾随负号。
这不是特别便宜。实现相同转换的最快方法是:
Dim s As String = "12345.12345-"
Dim d As Double = Double.Parse(s, Globalization.NumberStyles.Any)
这一直是他们的行为 CDbl()
在Visual Basic 4/5/6中并且当前特定于VB.NET(它是内联的,不是框架的一部分),所以它可能只是为了从早期版本迁移的人。
(就像之前从Visual Basic中购买的功能一样,在.NET之前的版本非常奇怪 QBasic中。)
如果你进入控制面板中的区域选项,有一个设置让你在数字后面而不是之前放下减号。
我不确定在数字之后哪个系统使用减号,但似乎CDbl被编程为接受两者。在你所接受的,以及所有这些方面要自由。
区域选项还有一个负数的设置,它们在括号中。那样有用吗? - CDbl("(12345.12345)")