Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net VB编译器从字符串到数字的转换_Vb.net_Type Conversion - Fatal编程技术网

Vb.net VB编译器从字符串到数字的转换

Vb.net VB编译器从字符串到数字的转换,vb.net,type-conversion,Vb.net,Type Conversion,这更像是一个关于VB编译器正在做什么的好奇问题。基本上,下面的代码会生成一个错误 If "String" = CInt(1) Then End If 应该如此。让我好奇的是报告的错误是 Conversion from string "String" to type 'Double' is not valid. 所以,我想我的问题是,当我假设编译器应该转换为整数时,为什么编译器试图转换为Double 下面可以给出一些提示 以下 If "String" = CInt(1) Th

这更像是一个关于VB编译器正在做什么的好奇问题。基本上,下面的代码会生成一个错误

    If "String" = CInt(1) Then

    End If
应该如此。让我好奇的是报告的错误是

Conversion from string "String" to type 'Double' is not valid.

所以,我想我的问题是,当我假设编译器应该转换为整数时,为什么编译器试图转换为Double

下面可以给出一些提示

以下

If "String" = CInt(1) Then

End If
innerexception堆栈跟踪显示

at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)
at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
即使您将声明更改为

如果“字符串”=CDbl(1),则

如果“字符串”=CDec(1),则

它仍然显示上面给出的innerexception堆栈跟踪

这意味着它与右边的值无关。编译器在执行隐式转换时的行为是将字符串转换为更适合的双精度数据类型(long可能太长)

可以通过将语句更改为:

If CInt("String") = CLng(1) Then

End If
为此,innerexception stacktrace显示

at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)
at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

这意味着,即使对于显式类型转换,它也会首先尝试将字符串转换为double(最适合),然后将其转换为integer。

这与类型升级比类型转换更相关。似乎没有“类型升级”标记。但是是的,我认为你是对的。