0

我正在尝试将字符串转换为 int ,出于某种原因,以下似乎可行。

Dim theInt As Int32 = CInt("55e5")
Console.WriteLine("String to Int32: " & theInt)

我无法理解为什么它可以正确转换并输出 55​​00000

4

2 回答 2

1

它将其转换e5为科学记数法(认为这是正确的术语?),因此它将小数位推高 5 次,因此5500000(5 个额外的 0)

于 2013-10-29T17:43:36.467 回答
0

你在哪里期待 55 作为答案?旧的 VB VAL() 会返回它。

我为我们的代码使用了一个自定义的 .Net Val()。在主要处理美元符号、逗号、() 时,但可以扩展:

Public Function ValTest(ByVal value As String) As Double
    If String.IsNullOrEmpty(value) Then Return 0
    If IsNumeric(value) Then Return CDbl(value.Trim) ' IsNumeric and CDbl strip currency $ and comma, and support accounting negation e.g. ($23.23) = -23.23
    ' deal with case where leading/trailing non-numerics are present/expected
    Dim result As String = String.Empty
    Dim s As String = value.Trim
    If s.StartsWith("(") Then s.Replace("(", "-") ' leading ( = negative number from accounting - not supported by VB.Val()
    For Each c As Char In s
        If Char.IsNumber(c) OrElse "-.".Contains(c) Then
            result = (result + c)
        End If
    Next c
    If String.IsNullOrEmpty(result) Then
        Return 0
    Else
        Return CDbl(result)
    End If
End Function
于 2013-10-29T20:09:32.897 回答