“UPGRADE_WARNING:Mod 有新行为”指的是什么?

Dav*_*Caz 5 .net vb6 vb6-migration

我必须使用旧的 VS2008 转换工具将一些 VB6 代码转换为 VB.net。当不确定原始代码和转换后的代码是否等效时,该工具可以帮助插入警告注释。其中一个例子是:

UPGRADE_WARNING:Mod 有新行为

单击了解更多信息:'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"'

ms-help://...据我所知,这个“链接”不再起作用。我也无法在网络上找到任何引用该链接的内容。

这个警告实际上指的是什么?功能上有什么区别mod

Dav*_*Caz 6

首先,这解释了语言变化本身。其次解决有关链接的问题ms-help

\n
\n

https://www.vbmigration.com/documentation/chapter3.aspx上给出了解释:

\n
\n

取模运算符

\n

VB6\xe2\x80\x99s Mod 运算符自动将其操作数转换为整数值并返回整数除法的余数:

\n
Dim d As Double, i As Integer\nd = 1.8: i = 11\nDebug.Print i Mod d     \' Displays 1, because it rounds up 1.8 to 2\n
Run Code Online (Sandbox Code Playgroud)\n

VB.NET 和 C# 不会将\xe2\x80\x99 转换为整数,并且如果两个操作数中的任何一个的类型为 Single\nDouble,则返回浮点除法的余数。

\n
\n

同一页面继续建议,通过添加调用,CInt()您可以重现原始行为,例如:

\n
\n
Debug.WriteLine(i Mod CInt(d))\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\n

官方 VB 文档证实了这一点。

\n

VB6

\n
\n

评论

\n

模数或余数运算符将 number1 除以 number2(将浮点数舍入为整数)并仅返回余数作为结果。

\n
\n

(实际上是VBA文档......)

\n

VB.Net

\n
\n

评论

\n

如果 number1 或 number2 是浮点值,则返回除法的浮点余数。结果的数据类型是可以容纳由数据类型 number1 和 number2 相除得到的所有可能值的最小数据类型。

\n
\n
\n

请注意,ms-help如果您仍然安装了 VS2008,这些链接实际上会起作用。它会调出内置的本地帮助 GUI。不确定这些链接何时停止工作,但我认为至少到 VS2015 时它们没有停止工作。

\n

对于这个有关Mod帮助系统的特殊警告,有这样的说法:

\n
\n

模组操作员

\n

在 Visual Basic 6.0 中,Mod运算符接受任何数值表达式\n并且结果始终以整数形式返回。

\n

在 Visual Basic 2008 中,Mod运算符不再接受变体,并且\n如果任一操作数是浮点数,\n结果将是浮点数。

\n
\n

恕我直言,这实际上并不是对不同之处的非常精确的描述。特别地,没有充分强调除法结果已经从总是执行整数除法改变。它只提到返回结果是一个整数。

\n

上面的信息比较全面。

\n

为了完整起见,它还添加了:

\n
\n

接下来做什么

\n

如果在升级过程中变体已转换为对象,请将其转换为适当的数字数据类型。

\n

如果任一操作数是浮点数,请修改结果的数据类型,或修改代码以CShort在使用 Mod 运算符之前使用函数转换操作数。

\n
\n