【问题标题】:CInt vs. Math.Round in Visual Basic .NETVisual Basic .NET 中的 CInt 与 Math.Round
【发布时间】:2015-09-27 09:03:13
【问题描述】:

有什么区别:

    Dim a As Integer = CInt(2.2)

    Dim a As Integer = Math.Round(2.2)

?

【问题讨论】:

  • 请只问一个问题。如果您有多个问题,请将它们作为单独的问题发布。
  • 是问了两个问题导致否决投票的原因还是问题有其他问题?
  • 编辑答案以回答您的新问题。

标签: vb.net


【解决方案1】:

CInt 返回一个整数,但会将 0.5 舍入到最接近的偶数,因此:

2 = CInt(2.5)
4 = CInt(3.5)

都是真的,这可能不是你想要的。

Math.Round 可以被告知从零舍入。但是返回一个double,所以我们仍然需要转换它

3 = CInt(Math.Round(2.5, MidpointRounding.AwayFromZero))

【讨论】:

    【解决方案2】:

    这两个函数之间的区别在于它们做的事情完全不同:

    • CInt 转换为 Integer 类型
    • Math.Round 将值四舍五入到最接近的 Integer

    Math.Round 在这种情况下会得到2.0,由MSDN documentation 指定。您也使用了该功能不正确,请参阅上面的 MSDN 链接。

    如果转换失败,两者都会引发Exception,您可以使用Try..Catch for this

    旁注:您是 VB.NET 的新手,但您可能想尝试切换到 C#。我发现它是 VB.NET 和 C++ 的混合体,比 VB.NET 更容易使用。

    【讨论】:

    • 确实是“混合”。 C# 本质上是带有大括号、分号和 C 的变幻莫测的 VB。converter.telerik.comliterateprogramming.com/ctraps.pdf 证实了这一点,这是一本有启发性的读物(既然你提到它,C++ 被恰当地描述为通过将额外的腿钉在一只狗)>;-)。作为初学者,最好从 VB 入手,因为它的陷阱较少。附言我不是为了一场语言战争而剧透,只是提供不同的意见。
    • 根据您在此答案中链接的文档Math.Round 返回Decimal 类型或Double 类型,具体取决于调用方式。
    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多