【问题标题】:Convert String to Double - VB将字符串转换为双精度 - VB
【发布时间】:2009-07-23 14:49:21
【问题描述】:

VB中是否有有效的方法来检查字符串是否可以转换为double?

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

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

【问题讨论】:

    标签: vb.net string double try-catch


    【解决方案1】:

    如果您使用的是 .NET 1.1/2.0/3.0/3.5/4.0/4.5,请尝试查看 Double.TryParse()

    【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

    • 这个可以将字符串转换为双精度。我试过 Convert.ToDouble、cdbl 和 Double.TryParse。但实际上需要 Val() 才能完成这项工作。
    【解决方案3】:
    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
    

    【讨论】:

      【解决方案4】:

      国际版本:

          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
      

      【讨论】:

        【解决方案5】:

        我简单地使用了Eval(string),它被评估为 Double。

        【讨论】:

          猜你喜欢
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-10
          相关资源
          最近更新 更多