2009-07-23 12 views
17

Existe-t-il une méthode efficace dans VB pour vérifier si une chaîne peut être convertie en double? Je le fais actuellement en essayant de convertir la chaîne en double et en voyant si elle déclenche une exception. Mais cela semble ralentir mon application.Convertir la chaîne en 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 je suppose? –

Répondre

20

Essayez de regarder Double.TryParse() si vous utilisez .NET 1,1/2,0/3,0/3,5/4,0/4,5

+0

Contrairement aux autres méthodes TryParse, Double.TryParse existe depuis au moins .NET 1.1 http://msdn.microsoft.com/fr-fr/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 Exemple de code

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

Celui-ci a travaillé en convertissant une chaîne en double. J'avais essayé Convert.ToDouble, cdbl et Double.TryParse. Mais il a fallu un Val() pour faire le travail. – bendecko

3

Les versions internationales:

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 

Résultats:

 ' 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 
Questions connexes