Foxtable(狐表)用户栏目专家坐堂 → 不明白的问题


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

主题:不明白的问题

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


加好友 发短信
等级:童狐 帖子:241 积分:2618 威望:0 精华:0 注册:2013/4/2 22:30:00
不明白的问题  发帖心情 Post By:2013/10/23 3:04:00 [只看该作者]

 
图片点击可在新窗口打开查看此主题相关图片如下:无标题2.jpg
图片点击可在新窗口打开查看
如图,有个临时表。表达式列[金额] = [工时费] * [折扣] = 23.75
可是用代码去引用数据,不管是Tables("临时表").Compute("Sum(金额)")

For Each theRow In Tables("临时表")
     theRow("金额")
Next

用messagebox调试时得到的都是23.74999...

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


加好友 发短信
等级:四尾狐 帖子:953 积分:7252 威望:0 精华:0 注册:2011/9/6 13:36:00
  发帖心情 Post By:2013/10/23 6:49:00 [只看该作者]

金额列设置的是4位小数,因此显示的是23.7500,而真实值为 23.7499997019768,如果要一样,请修改表达式

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/10/23 8:13:00 [只看该作者]


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


加好友 发短信
等级:童狐 帖子:241 积分:2618 威望:0 精华:0 注册:2013/4/2 22:30:00
  发帖心情 Post By:2013/10/23 8:39:00 [只看该作者]

如果25*0.95=23.74999那我能理解,因为表达式列设置了4位小数,所以显示23.7500,问题是25*0.95就正好等于23.75啊,怎么四舍五入也不会出来个23.74999呀

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


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

双精度小数就是会有这样的小误差的,不用纠结它哦.

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/10/23 8:43:00 [只看该作者]

对于计算机来说,1有的时候并不等于1的:

 

http://www.foxtable.com/help/topics/1829.htm

 

 

另外,记得涉及计算的列,列类型尽量不要用单进度小数,请用双精度小数,单进度出现的计算误差更大。

[此贴子已经被作者于2013-10-23 8:44:27编辑过]

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


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

以下是引用狐狸爸爸在2013-10-23 8:43:00的发言:

对于计算机来说,1有的时候并不等于1的:

 

http://www.foxtable.com/help/topics/1829.htm

 

 

另外,记得涉及计算的列,列类型尽量不要用单进度小数,请用双精度小数。


双精度一样误差的啊,帮助文件里举例的都是双精度小数呢图片点击可在新窗口打开查看

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/10/23 8:56:00 [只看该作者]

呵呵,按理,双精度不会出现一楼这么大的误差的,楼主可能至少一列是单精度

 

图片点击可在新窗口打开查看

[此贴子已经被作者于2013-10-23 9:16:49编辑过]

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


加好友 发短信
等级:童狐 帖子:241 积分:2618 威望:0 精华:0 注册:2013/4/2 22:30:00
  发帖心情 Post By:2013/10/23 9:03:00 [只看该作者]

  好的感谢楼上各位。金额是双精度,参与计算的其他两列是单精度。那我列类型就不改了,在引用数据的代码前加Round2吧。如果不想四舍五入,比如不管是1.25还是1.22,我只想取1.2(用代码如何做)
[此贴子已经被作者于2013-10-23 9:04:27编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/10/23 9:17:00 [只看该作者]

Dim c As Double = 1.25
output.show(math.Floor(c * 10) /10)

 回到顶部