VB.NET输入金额需为1000整数倍的校验问题排查
VB.NET 金额输入校验:确保输入为1000的整数倍
原代码的问题在于使用CLng()转换输入值时,会直接截断小数部分——比如输入7000.01会被转换成整数7000,导致校验逻辑误判为合法输入。要修正这个问题,需要先保留输入的小数信息,再进行校验。
修正思路
- 优先将输入转换为适合金额计算的
Decimal类型(避免浮点精度问题) - 校验两个核心条件:
- 数值本身没有小数部分(即小数位为0)
- 数值除以1000后结果为整数
修正后的代码示例
Dim inputAmount As Decimal ' 先判断输入是否能转换为合法的数值 If Decimal.TryParse(vAnswers(MINADDINDEX), inputAmount) Then ' 校验是否为1000的整数倍(无小数且能被1000整除) If inputAmount Mod 1000 <> 0 OrElse inputAmount <> Math.Floor(inputAmount) Then fDldErrors = True vAnswersErrs(MINADDINDEX) = "金额必须为1000的整数倍" End If Else ' 处理非数值输入的情况 fDldErrors = True vAnswersErrs(MINADDINDEX) = "请输入合法的数值" End If
代码说明
- 使用
Decimal.TryParse()确保输入能被正确转换为数值,避免转换异常 inputAmount <> Math.Floor(inputAmount)用于判断输入是否存在小数部分inputAmount Mod 1000 <> 0判断数值是否能被1000整除- 两个条件用
OrElse连接,只要满足其中一个就判定为非法输入
内容的提问来源于stack exchange,提问作者Akshay phalphale
相关产品推荐
相关产品推荐

