VB.NET中的整数值舍入

时间:2014-04-08 02:34:34

标签: vb.net

我的代码如下:

Dim num1 As Integer
Dim num2 As Integer

num1 = 12.5
num2 = 17.5

当我输出值时,我得到了这个:

num1: 12
num2: 18

如果12.5变为12,那么17.5应该是17吗?

如果17.5成为1812.5应该是13吗?

我在Visual Basic中很新,而且很难找到任何参考。

3 个答案:

答案 0 :(得分:8)

这是因为VB使用了banker’s rounding (round-to-even rule)

中所述的Integer documentation

在此方法中,当舍入位置的余数为.5时,当之前的数字为奇数时,该数字向上舍入,并且<当之前的数字为时,强>向下。

例如,使用round-to-even规则

2.5 round down to the even number 2.0, 
3.5 would round up to the even number 4.0

答案 1 :(得分:3)

无论如何,您真的不应该将Double值分配给Integer个变量。每当你依赖隐式转换时,如果事情没有按照你想要的方式发生,你真的不应该感到惊讶。也就是说,即使是明确的转换,例如CInt,会做同样的事情。

查看Math.Round方法的文档,特别是带有MidpointRounding值的重载。这就是你控制这些值四舍五入的方式。

答案 2 :(得分:1)

这是因为默认情况下VB.NET会舍入到最接近的偶数。因此12.5将是12而17.5是18,因为17是奇数。