我的代码如下:
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
成为18
,12.5
应该是13
吗?
我在Visual Basic中很新,而且很难找到任何参考。
答案 0 :(得分:8)
这是因为VB
使用了banker’s rounding (round-to-even rule)
在此方法中,当舍入位置的余数为.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是奇数。