以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于数值类型的精确对比的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=158357)

--  作者:guosheng
--  发布时间:2020/11/17 15:52:00
--  关于数值类型的精确对比的问题

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20201117154733.png
图片点击可在新窗口打开查看

阴影部分的值分别为:5891.48    -   5000      - 891.48  弹窗三者的差是个科学计数的小数,造成判断不成立,该怎么处理啊?
表的datacolchanged事件:
If round2(e.DataRow("支单金额"),2)-round2(e.DataRow("累计支付"),2)-round2(e.DataTable.compute("sum(本次金额)","资金支付明细ID=\'"& e.DataRow("资金支付明细ID") &"\'"),2)<0
        messagebox.show("多次付款的金额不能超过支单金额.")
        e.DataRow("本次金额")=Nothing
End If


--  作者:有点蓝
--  发布时间:2020/11/17 15:54:00
--  
把这3个列都改为高精度类型的列,然后直接减判断即可,不需要round2
--  作者:guosheng
--  发布时间:2020/11/17 16:00:00
--  
之前这些列存了好多 double类型的数据
1、改成高精度小数,对现有数据有影响吗
2、要求存的数据是小数点后两位,即使改了数据类型,还是要round2吧


另外,我把round2放到最外边,可以了。round2是真正的四舍五入,保留2位小数的话,做四舍五入的顺序应该没影响吧。怎么会出现这种问题啊?
round2(e.DataRow("支单金额")-e.DataRow("累计支付")-e.DataTable.compute("sum(本次金额)","资金支付明细ID=\'"& e.DataRow("资金支付明细ID") &"\'"),2)<0

[此贴子已经被作者于2020/11/17 16:06:03编辑过]

--  作者:有点蓝
--  发布时间:2020/11/17 16:50:00
--  
1、没有任何影响
2、完全不需要round2