Visual Basic 2017中如何避免小数自动向上取整?
问题分析与修复方案
问题原因
你的代码存在两个核心问题:
- 变量大小写不一致:
ElseIf分支里的dbltable(小写t)和前面定义的dblTable(大写T),虽VB默认不区分大小写,但这是不良编码习惯,严格模式下会引发编译错误。 - 计算逻辑错误:当客人数量不能被8整除时,你用了浮点数除法
dblGuest / 8 + 1,比如4位客人时,4/8=0.5,加1得到1.5,若dblTotal是整数类型,会被自动向上取整为2,这就是异常根源。
修复后的代码
方案1:整数除法实现向上取整(推荐)
利用整数除法特性,通过(客人数量 + 单桌容量 - 1) \ 单桌容量实现向上取整,避免浮点数运算问题:
Dim dblGuest As Double = ' 输入的客人数量 Dim dblTable As Double = 8 ' 单桌最大容纳人数 Dim dblTotal As Double If dblGuest Mod dblTable = 0 Then dblTotal = dblGuest / dblTable Else ' 用反斜杠\执行整数除法,自动向上取整 dblTotal = (dblGuest + dblTable - 1) \ dblTable End If
方案2:使用Math.Ceiling函数简化逻辑
直接用.NET的Math.Ceiling函数对浮点数除法结果向上取整,无需分支判断:
Dim dblGuest As Double = ' 输入的客人数量 Dim dblTable As Double = 8 ' 单桌最大容纳人数 Dim dblTotal As Double dblTotal = Math.Ceiling(dblGuest / dblTable)
验证结果
- 输入1:
Math.Ceiling(1/8)=1,正确 - 输入4:
Math.Ceiling(4/8)=1,正确 - 输入8:
Math.Ceiling(8/8)=1,正确 - 输入9:
Math.Ceiling(9/8)=2,正确
内容的提问来源于stack exchange,提问作者Yokai
相关产品推荐
相关产品推荐

