以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  Double数据运算之后多出来0.0001  (http://www.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

图片点击可在新窗口打开查看此主题相关图片如下:小数的错误.jpg
图片点击可在新窗口打开查看


无税跟含税单价字段都设置成了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 b As Decimal = e.datarow("列2")

Dim c As decimal = a * b

e.Datarow("列3") = c

 


--  作者:atmetmicoo
--  发布时间:2013/9/30 11:41:00
--  
谢谢Bin,是我看教程的时候理解有误,我换高精度了,测试没问题。