Visual Basic .NET 中的 CInt 与 Math.Round

Posted

技术标签:

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

有什么区别:

    Dim a As Integer = CInt(2.2)

    Dim a As Integer = Math.Round(2.2)

?

【问题讨论】:

请只问一个问题。如果您有多个问题,请将它们作为单独的问题发布。 msdn.microsoft.com/en-us/library/s2dy91zy.aspx 是问了两个问题导致否决投票的原因还是问题有其他问题? 编辑答案以回答您的新问题。 【参考方案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.com 和literateprogramming.com/ctraps.pdf 证实了这一点,这是一本有启发性的读物(既然你提到它,C++ 被恰当地描述为通过将额外的腿钉在一只狗)>;-)。作为初学者,最好从 VB 入手,因为它的陷阱较少。附言我不是为了一场语言战争而剧透,只是提供不同的意见。 根据您在此答案中链接的文档Math.Round 返回Decimal 类型或Double 类型,具体取决于调用方式。

以上是关于Visual Basic .NET 中的 CInt 与 Math.Round的主要内容,如果未能解决你的问题,请参考以下文章

Visual Basic .Net 中等效的公共虚拟外部字符串

将电子表格 (OpenOffice) 导入 Visual Basic .net 组合框

Visual Basic 语言的 Xmpp 库

在 Visual Basic VB.Net 2010 中使用 System.DateTime 类型作为可选参数

为啥某些 Microsoft 语言被称为“视觉”? (Visual C#、Visual Basic .NET、Visual C++)

在 Visual Basic .NET 中提取 Zip 文件