VB很基本的语法,有点搞不懂了

erdong988 2016-12-23 04:32:11
Dim iWKPmoney As Double
If (CDbl(rstB2.Fields("isum")) - CDbl(rstB2.Fields("isokpsum"))) >= iWKPmoney Then


rstB2.Fields("isum")=10480
rstB2.Fields("isokpsum")=0
iWKPmoney=10480 时,
这个if 语句应该是满足的呀,可为什么跟代码就说不满足呢?

我修改为

If cstr(CDbl(rstB2.Fields("isum")) - CDbl(rstB2.Fields("isokpsum"))) >= cstr(iWKPmoney) Then

跟代码调试,就正确了……为什么?
...全文
315 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
erdong988 2016-12-23
  • 打赏
  • 举报
回复
代码中的列都是金额,和当初一样的数据,我改为 currency 之后,程序运行正确, 应该就是1楼说的浮点误差,可能从数据库中取出来的,看似10480,实际比10480大那么一点点……
舉杯邀明月 2016-12-23
  • 打赏
  • 举报
回复
我试了一下你的“第1种情况”,没有问题的啊。


我不知道你的 rstB2 是什么对象,也不清楚你的 rstB2.Fields( ) 返回值是什么类型,
但你用了 CDbl( ) 函数,那么一定会是双精度浮点数的结果,减法运算的结果也是双精度的值。
我的测试代码中用“字符串”代替你的 rstB2.Fields( ) 结果,是完全等效的。
如果楼主确定你的代码没有写错(在使用的地方),那么你得确认一下变量iWKPmoney的“取值”来源。

双精度数值进行比较,必须注意“误差问题”,然而很多人却没意识到这个问题。
如果变量iWKPmoney的值是其它的“运算结果”,即使你在调试时“看到”它的值是10480,
  但“实际值”未必是刚好是那么多,也许会是“微乎其微”的尾数被IDE给你进行了舍入后显示的结果。
(你这儿“不满足条件”,很可能是因尾数被“舍去”了才看到是10480)
如果你的 rstB2.Fields( ) 是“整数的”,并且其值及运算结果不会超过“Long类型”的值域,
 建议你用 CLng( )函数,这样不会有“精度误差”问题带来的影响。

改成这样即可:
If (CLng(rstB2.Fields("isum")) - CLng(rstB2.Fields("isokpsum"))) >= CLng(iWKPmoney) Then
Tiger_Zhao 2016-12-23
  • 打赏
  • 举报
回复
浮点小数有误差。
金额有专门的类型 Currency(4位定点小数)。
Dim iWKPmoney As Currency
If (CCur(rstB2.Fields("isum")) - CCur(rstB2.Fields("isokpsum"))) >= iWKPmoney Then

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧