2009-07-23 17 views
17

在VB中是否有一种有效的方法来检查字符串是否可以转换为double?将字符串转换为双字节 - VB

我目前正在通过尝试将字符串转换为双精度型,然后看它是否会引发异常。但是这似乎会减慢我的应用程序。

Try 
    ' if number then format it. 
    current = CDbl(x) 
    current = Math.Round(current, d) 
    Return current 
Catch ex As System.InvalidCastException 
    ' item is not a number, do not format... leave as a string 
    Return x 
End Try 
+0

vb.net我想? – 2009-07-23 14:53:34

回答

20

试着看一下Double.TryParse(),如果您使用的是.NET 1.1/2.0/3.0/3.5/4.0/4.5

+0

与其他TryParse方法不同,Double.TryParse自至少.NET 1.1以来一直存在http://msdn.microsoft.com/en-us/library/system.double.tryparse%28v=vs.71%29.aspx – 2012-10-02 09:04:09

11
Dim text As String = "123.45" 
Dim value As Double 
If Double.TryParse(text, value) Then 
    ' text is convertible to Double, and value contains the Double value now 
Else 
    ' Cannot convert text to Double 
End If 
16

VB.NET示例代码

Dim A as String = "5.3" 
Dim B as Double 

B = CDbl(Val(A)) '// Val do hard work 

'// Get output 
MsgBox (B) '// Output is 5,3 Without Val result is 53.0 
+1

这一个工作将字符串转换为双倍。我试过Convert.ToDouble,cdbl和Double.TryParse。但是这需要一个Val()来完成这项工作。 – bendecko 2014-09-25 16:06:11

3

的国际版本:

Public Shared Function GetDouble(ByVal doublestring As String) As Double 
     Dim retval As Double 
     Dim sep As String = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator 

     Double.TryParse(Replace(Replace(doublestring, ".", sep), ",", sep), retval) 
     Return retval 
    End Function 

    ' NULLABLE VERSION: 
    Public Shared Function GetDoubleNullable(ByVal doublestring As String) As Double? 
     Dim retval As Double 
     Dim sep As String = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator 

     If Double.TryParse(Replace(Replace(doublestring, ".", sep), ",", sep), retval) Then 
      Return retval 
     Else 
      Return Nothing 
     End If 
    End Function 

结果:

 ' HUNGARIAN REGIONAL SETTINGS (NumberDecimalSeparator: ,) 

     ' Clean Double.TryParse 
     ' ------------------------------------------------- 
     Double.TryParse("1.12", d1)  ' Type: DOUBLE  Value: d1 = 0.0 
     Double.TryParse("1,12", d2)  ' Type: DOUBLE  Value: d2 = 1.12 
     Double.TryParse("abcd", d3)  ' Type: DOUBLE  Value: d3 = 0.0 

     ' GetDouble() method 
     ' ------------------------------------------------- 
     d1 = GetDouble("1.12")   ' Type: DOUBLE  Value: d1 = 1.12 
     d2 = GetDouble("1,12")   ' Type: DOUBLE  Value: d2 = 1.12 
     d3 = GetDouble("abcd")   ' Type: DOUBLE  Value: d3 = 0.0 

     ' Nullable version - GetDoubleNullable() method 
     ' ------------------------------------------------- 
     d1n = GetDoubleNullable("1.12") ' Type: DOUBLE? Value: d1n = 1.12 
     d2n = GetDoubleNullable("1,12") ' Type: DOUBLE? Value: d2n = 1.12 
     d3n = GetDoubleNullable("abcd") ' Type: DOUBLE? Value: d3n = Nothing