【问题标题】:What's the difference between the Int() method and Math.Floor() methods in VB.NET?VB.NET 中的 Int() 方法和 Math.Floor() 方法有什么区别?
【发布时间】:2017-07-19 19:59:31
【问题描述】:

我正在尝试生成 2 个值之间的正随机整数,MSDN 将此公式列为在特定范围内生成随机数:
randomValue = CInt(Math.Floor((upperbound - lowerbound + 1) * Rnd())) + lowerbound。
该页面稍后列出了一个似乎使用 Int() 而不是 Math.Floor() 的示例:
Dim value As Integer = CInt(Int((6 * Rnd()) + 1)).
这种情况下Int方法和Math.Floor有什么区别吗?

【问题讨论】:

  • 该页面中的 msdn 说了什么?

标签: vb.net visual-studio random int floor


【解决方案1】:

这里是细目...

    CInt(0.1)  -----> 0
    CInt(0.7)  -----> 1
    CInt(-0.1) -----> 0
    CInt(-0.7)  -----> -1

    Int(0.1)  -----> 0.0
    Int(0.7)  -----> 0.0
    Int(-0.1) -----> -1.0
    Int(-0.7)  -----> -1.0

    Math.Floor(0.1)  -----> 0.0
    Math.Floor(0.7)  -----> 0.0
    Math.Floor(-0.1) -----> -1.0
    Math.Floor(-0.7) -----> -1.0

或者,如果您愿意,CInt 更像 Math.Round,而 floor 是 NEXT LOWEST INTEGER.. 请注意,这是 NOT 下一个最接近的归零。

Int 类似于 Floor,但 Floor 只接受 Decimal 或 Double 类型,而 Int 有更多的重载。

无论哪种方式,您都需要再次将它们强制转换为整数。

【讨论】:

  • CInt() Int()
  • 感谢@GSerg 指出这一点,为了完整起见,我更新了我的答案。,
  • 这与完整性无关,它使“相当多”有点错误。外层CInt 不相关,只有内层Int 相关,作为Hans Passant noticed,与Math.Floor 相同。
  • 是的,我知道,我误读了问题的初始点...@Gserg,已经在纠正它。
  • @Craig,谢谢。 Oddly Int 也重载了整数类型,尽管 MSDN 中的措辞与这些类型相矛盾。
【解决方案2】:

Int() 是 .NET 出现之前存在于 VB 中的遗留函数。

源代码不包含在参考源代码中,但一个不错的反编译器可以向您展示它的作用。导航到 Microsoft.VisualBasic.Conversion 类以查看:

public static double Int(double Number)
{
    return Math.Floor(Number);
}

没有惊喜,用你喜欢的任何口味。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2015-04-18
    • 2016-06-28
    相关资源
    最近更新 更多