奇数除以二后出现不一致舍入问题的解决咨询
解决VB中.5结尾小数的交替舍入问题
这是Visual Basic默认采用的银行家舍入法(四舍六入五成双)导致的,不是代码错误。当小数部分恰好为0.5时,规则是舍入到最近的偶数整数:
- 0.5 → 0(0是偶数)
- 1.5 → 2(2是偶数)
- 2.5 → 2(你描述的2.5舍为3是笔误,默认规则下实际会舍入到偶数2)
你的代码中,整数Input除以2得到的小数赋值给整数Output时,VB自动触发了这种舍入逻辑。
解决方案
根据你的需求选择对应的处理方式:
始终向上舍入(0.5→1、1.5→2、2.5→3)
用Math.Ceiling实现,需先将运算转为浮点数:
Dim Input As Integer Dim Output As Integer Input = Val(TextBox1.Text) Output = CInt(Math.Ceiling(Input / 2.0)) Label25.Text = Output.ToString()
始终向下舍入(0.5→0、1.5→1、2.5→2)
用Math.Floor处理:
Dim Input As Integer Dim Output As Integer Input = Val(TextBox1.Text) Output = CInt(Math.Floor(Input / 2.0)) Label25.Text = Output.ToString()
强制四舍五入(0.5一律向上舍入)
用Math.Round并指定舍入模式为MidpointRounding.AwayFromZero:
Dim Input As Integer Dim Output As Integer Input = Val(TextBox1.Text) Output = CInt(Math.Round(Input / 2.0, MidpointRounding.AwayFromZero)) Label25.Text = Output.ToString()
正数场景简易四舍五入
如果只处理正数输入,也可以用加0.5后取整的方式:
Dim Input As Integer Dim Output As Integer Input = Val(TextBox1.Text) Output = CInt((Input / 2.0) + 0.5) Label25.Text = Output.ToString()
注意:此方法不适用于负数,优先推荐
Math.Round指定参数的方式。
内容的提问来源于stack exchange,提问作者DeathRider_CZE
相关产品推荐
相关产品推荐

