以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- Double数据运算之后多出来0.0001 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=40811) |
-- 作者:atmetmicoo -- 发布时间:2013/9/30 11:15:00 -- Double数据运算之后多出来0.0001 狐爸, 我在表事件DataColChanged中设置了一行代码: [无税单价]= (1-[税率])*[含税单价] 税率=0 含税单价=650.0000 无税单价怎么算出来等于650.0001 无税跟含税单价字段都设置成了Double类型,以前也发现过这个问题,很是担心,因为接下来财务模块就要启用了,不知道为什么会出现这个问题,是否需要注意什么问题?
|
-- 作者:Bin -- 发布时间:2013/9/30 11:17:00 -- 对精度有高要求,直接使用高精度小数吧. |
-- 作者:Bin -- 发布时间:2013/9/30 11:18:00 -- 如果堆精度要求不是非常高,直接四无五入,或者去除小数即可. |
-- 作者:atmetmicoo -- 发布时间:2013/9/30 11:24:00 -- 就是不明白这个小数0.0001是怎么出来的,如果四舍五入精确到4位,这个0.0001也应该是有的吧 |
-- 作者:Bin -- 发布时间:2013/9/30 11:26:00 -- 双精度小数本来就回有0.00001的误差. 你知道就可以了,不用纠结原因. 非要纠结,可以自行百度扩展双精度浮点小数误差 如我2楼所说你可以直接使用高精度小数,就不会有误差问题.
|
-- 作者:狐狸爸爸 -- 发布时间:2013/9/30 11:28:00 -- 参与计算的列,包括接收计算结果的列,列类型全部改为双精度小数。 如果还不行,就修改一下计算代码:
Dim a As Decimal = e.datarow("列1") Dim c As decimal = a * b e.Datarow("列3") = c
|
-- 作者:atmetmicoo -- 发布时间:2013/9/30 11:41:00 -- 谢谢Bin,是我看教程的时候理解有误,我换高精度了,测试没问题。 |