2009-07-23 2 views
17

Есть ли эффективный метод в VB, чтобы проверить, может ли строка быть преобразована в double?Преобразование строки в 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 я полагаю? –

ответ

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 –

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

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 
Смежные вопросы