Foxtable(狐表)用户栏目专家坐堂 → Double数据运算之后多出来0.0001


  共有4286人关注过本帖树形打印复制链接

主题:Double数据运算之后多出来0.0001

帅哥哟,离线,有人找我吗?
atmetmicoo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
Double数据运算之后多出来0.0001  发帖心情 Post By:2013/9/30 11:15:00 [只看该作者]

狐爸,


我在表事件DataColChanged中设置了一行代码:
[无税单价]= (1-[税率])*[含税单价]
税率=0
含税单价=650.0000

无税单价怎么算出来等于650.0001

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


无税跟含税单价字段都设置成了Double类型,以前也发现过这个问题,很是担心,因为接下来财务模块就要启用了,不知道为什么会出现这个问题,是否需要注意什么问题?

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/30 11:17:00 [只看该作者]

对精度有高要求,直接使用高精度小数吧.

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/30 11:18:00 [只看该作者]

如果堆精度要求不是非常高,直接四无五入,或者去除小数即可.

 回到顶部
帅哥哟,离线,有人找我吗?
atmetmicoo
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
  发帖心情 Post By:2013/9/30 11:24:00 [只看该作者]

就是不明白这个小数0.0001是怎么出来的,如果四舍五入精确到4位,这个0.0001也应该是有的吧

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/30 11:26:00 [只看该作者]

双精度小数本来就回有0.00001的误差. 你知道就可以了,不用纠结原因. 非要纠结,可以自行百度扩展双精度浮点小数误差

如我2楼所说你可以直接使用高精度小数,就不会有误差问题.

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
  发帖心情 Post By:2013/9/30 11:41:00 [只看该作者]

谢谢Bin,是我看教程的时候理解有误,我换高精度了,测试没问题。

 回到顶部