以文本方式查看主题 - 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 -- 关于数值类型的精确对比的问题 阴影部分的值分别为: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 |