以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 不明白的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=41585) |
-- 作者:powermannico -- 发布时间:2013/10/23 3:04:00 -- 不明白的问题 此主题相关图片如下:无标题2.jpg 如图,有个临时表。表达式列[金额] = [工时费] * [折扣] = 23.75 可是用代码去引用数据,不管是Tables("临时表").Compute("Sum(金额)") 或 For Each theRow In Tables("临时表") theRow("金额") Next 用messagebox调试时得到的都是23.74999... |
-- 作者:yinyb36 -- 发布时间:2013/10/23 6:49:00 -- 金额列设置的是4位小数,因此显示的是23.7500,而真实值为 23.7499997019768,如果要一样,请修改表达式 |
-- 作者:狐狸爸爸 -- 发布时间:2013/10/23 8:13:00 -- 这样修改: http://www.foxtable.com/help/topics/0108.htm
|
-- 作者:powermannico -- 发布时间:2013/10/23 8:39:00 -- 如果25*0.95=23.74999那我能理解,因为表达式列设置了4位小数,所以显示23.7500,问题是25*0.95就正好等于23.75啊,怎么四舍五入也不会出来个23.74999呀 |
-- 作者:Bin -- 发布时间:2013/10/23 8:42:00 -- 双精度小数就是会有这样的小误差的,不用纠结它哦. |
-- 作者:狐狸爸爸 -- 发布时间:2013/10/23 8:43:00 -- 对于计算机来说,1有的时候并不等于1的:
http://www.foxtable.com/help/topics/1829.htm
另外,记得涉及计算的列,列类型尽量不要用单进度小数,请用双精度小数,单进度出现的计算误差更大。 [此贴子已经被作者于2013-10-23 8:44:27编辑过]
|
-- 作者:Bin -- 发布时间:2013/10/23 8:46:00 -- 以下是引用狐狸爸爸在2013-10-23 8:43:00的发言: 对于计算机来说,1有的时候并不等于1的:
http://www.foxtable.com/help/topics/1829.htm
另外,记得涉及计算的列,列类型尽量不要用单进度小数,请用双精度小数。 |
-- 作者:狐狸爸爸 -- 发布时间:2013/10/23 8:56:00 -- 呵呵,按理,双精度不会出现一楼这么大的误差的,楼主可能至少一列是单精度
[此贴子已经被作者于2013-10-23 9:16:49编辑过]
|
-- 作者:powermannico -- 发布时间:2013/10/23 9:03:00 -- 好的感谢楼上各位。金额是双精度,参与计算的其他两列是单精度。那我列类型就不改了,在引用数据的代码前加Round2吧。如果不想四舍五入,比如不管是1.25还是1.22,我只想取1.2(用代码如何做) [此贴子已经被作者于2013-10-23 9:04:27编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2013/10/23 9:17:00 -- Dim c As Double = 1.25 output.show(math.Floor(c * 10) /10) |