IsNumeric() 允许减去最后的值

Vij*_*jay 2 vb.net

IsNumeric()在代码中使用函数来验证数字。

IsNumeric(100) - 真的, IsNumeric(-100)- 真的, IsNumeric(+100)- 真的,

IsNumeric(100-)-真的- 我对此有疑问。(100-) 这是一个有效的数字吗?IsNumeric() 这个值返回true。

    Dim latitude As String = "12.56346-"
    If IsNumeric(latitude) Then
        If (Convert.ToDouble(latitude) >= -90 And Convert.ToDouble(latitude) <= 90) Then
            isValidLatitude.Text = "true"
        Else
            isValidLatitude.Text = "false"
        End If
     Else
        isValidLatitude.Text = "false"
     End If
Run Code Online (Sandbox Code Playgroud)

转换latitude为双精度时出错

Input string was not in a correct format.
Run Code Online (Sandbox Code Playgroud)

Cai*_*ard 7

IsNumeric来自Microsoft.VisualBasic命名空间/dll,一堆帮助程序的东西,旨在帮助 VB6 程序员获得他们在 VB.NET 上工作的神秘 VB6 代码/知识

您会注意到,如果您使用来自同一个 dll 的其他函数,例如Microsoft.VisualBasic.Conversion.Int(),或者您使用专用的 VB.NET 转换器,例如CIntCDbl这些也将处理尾随减号并返回负值

如果您想放弃 VB6 的旧方法,请使用数字类型的 TryParse .. 但总而言之,要保持一致/如果您使用 Microsoft.VisualBasic 中的函数来确定是否可以进行转换,请使用 vb 转换,因为在包本身是一致的,但在 Microsoft.VB 和普通的 .net 系统之间存在一些行为差异


编辑:

一些人一直想知道源代码以及它如何使用 TryParse,那么为什么它不像直接使用 TryParse 那样工作呢?

Microsoft.VisualBasic.Information.IsNumeric()用于Microsoft.VisualBasic.CompilerServices.DoubleType.TryParse()确定表达式是否为数字。这DoubleType.TryParseDouble.TryParse- 它又是 VB 命名空间中的一个辅助方法,专门设置NumberStyles.AllowTrailingSign许多其他标志中的标志。在解析数字时(首先作为非货币相关,使用 Double.Parse,然后如果失败,则使用调整后的货币相关测试的值进行第二次尝试)此 AllowTrailingSign 标志将与其他区域数字格式规则一起考虑,以确定是否传入的值是数字

您会注意到,在遵循美国数字格式文化的机器上,“(100$)”字符串也被声明为数字,但调用Double.TryParse("(100$)", x)也会返回 false。这里的 VB 辅助方法在它们接受的内容方面比 System 方法更自由,因为它们告诉 System 方法比默认情况下更自由

如前所述,我一直将 Microsoft.VisualBasic 命名空间视为一堆辅助方法,旨在允许将糟糕的旧 VB6 代码粘贴到 VB.NET 中并以最少的改动工作。我不提倡在新项目中使用它,并且在我使用 VB.NET 时删除了引用 - 使用它来支持 VB6 的概念,即“只需将任何类型的任何东西都吊起来,它可能会弄清楚并且工作..如果没有,我们总是可以在错误恢复下”应该被丢弃,以支持对执行的操作及其意图的精确和准确