Office中国论坛/Access中国论坛

标题: 如何能实现真正的保留两位小数 [打印本页]

作者: martin    时间: 2002-5-12 06:56
标题: 如何能实现真正的保留两位小数
我在字段设计的时候,把小数位数设置成为2位,把格式设置为#。00,但是一些计算结果的字段虽然显示是两位小数,但我输出到WORD或EXECL时,得到的还是3位甚至4、5位,这样得到的结果很不准确,如何能让结果自动的进行四舍五入,我们这对这个要求的很严格,我想了很多办法也不能解决,请各位帮忙,谢谢
作者: cnwang    时间: 2002-5-12 16:20
ROUND
作者: martin    时间: 2002-5-23 04:27
我今天上午试了,基本上可以,但是我这round(0.005,2)是等于0的,我在EXECL里也试了一下,在EXECL里设置单元格的格式为小数两位,0.005等于0.01的,为什么,是不是美国佬的四舍五入和俺们中国的不一样,难道一定要写一个函数来处理吗,
作者: tmtony    时间: 2002-5-23 05:14
我记得2000以前版本要自己写round函数,2000或之后版本可直接引用
作者: martin    时间: 2002-5-23 17:49
谢谢TONY了,我用的正是2000,有没有现成的例子呀,我不想自已写
作者: 大熊    时间: 2002-5-24 09:00
这是因为ACCESS使用的是完全不同的进位方法,它将5进位至最近的奇数.
如你想使用传统的进位方法需要自已动手编制,请参考下列公式.N代表位数,X代表数字对象.
Xrounded = fix(10^N * X + 0.5) / 10^N (该公式处理负数时会不正确)

Ps.ACCESS这种进位方法进行计算时误差更小.

参考如下:

                  2 位                  2 位
原数          标准进位法              ACCESS所用进位法
  54.1754      54.18                  54.18
343.2050     343.21                 343.20
+106.2038    +106.20                +106.20
=========    =======                =======
503.5842     503.59                 503.58

(ACCESS所用进位法差距0.0042,而标准进位法误差为0.0058)


作者: zhuyiwen    时间: 2002-5-24 10:49

ACCESS 2000、ACCESS XP实测结果:

?round(.00500000000000000054,2)
.01
?round(.00500000000000000053,2)
0

[fly][em27][/fly]
作者: 大熊    时间: 2002-5-25 00:53
老朱,亏你怎么想到测试这两个数的?
作者: tmtony    时间: 2002-5-25 01:18
该不是你前后两个月的工资吧,ACCESS没给你进位,你记在心里啊
5354 粤语中正是不三不四 :)
作者: zhuyiwen    时间: 2002-5-25 01:36

这两个数值很有意义!

[move][em27][/move]
作者: martin    时间: 2002-5-25 05:11
多谢众位,我正是在算工资时发现的问题,回去试试,
作者: newredman    时间: 2002-5-25 05:36
我是一个ACCESS的爱好者,已经熟悉了各类窗体、查询的设计与制作,也不写一句语句搞了几个小项目,我现在想进一步学习,请问该从哪里开始
作者: newredman    时间: 2002-5-25 05:38
我是一个ACCESS的爱好者,已经熟悉了各类窗体、查询的设计与制作,也不写一句语句搞了几个小项目,我现在想进一步学习,请问该从哪里开始
作者: 大熊    时间: 2002-5-25 06:46
在当你问这个问题时,已经开始了。:)
作者: binbow_z    时间: 2002-5-25 19:42
一个我一直没有解决的问题,谢谢各位
作者: martin    时间: 2002-5-31 05:02
我试了大熊的函数,还是不太好使,我改了一下好像可以了,但莫名其妙
  我改成了Xrounded = fix(10^N *cstr(X) + 0.5) / 10^N
作者: zhuyiwen    时间: 2002-5-31 05:05
以下是引用martin在2002-5-30 21:01:37的发言:
我试了大熊的函数,还是不太好使,我改了一下好像可以了,但莫名其妙
  我改成了Xrounded = fix(10^N *cstr(X) + 0.5) / 10^N


round(X+0.00000000000000000054,2)

这样不行吗?
作者: martin    时间: 2002-5-31 05:12
你真能想出来,这么多零!!!你的X是什么类型的,是single.double,还是货币
作者: zhuyiwen    时间: 2002-5-31 05:16

不能这样吗?!

[fly][em04][em07][em04][/fly]
作者: martin    时间: 2002-5-31 05:19
总于数明白了,共18个0,为什么这样,能解释一下吗,
作者: zhuyiwen    时间: 2002-5-31 05:21
浮点数是有误差的。
作者: martin    时间: 2002-5-31 05:26
我也想过这个原因,只是不敢肯定,感谢
作者: martin    时间: 2002-6-2 04:15
zhuyiwen不好意思,又要打扰了,我试了,还是不行,小数点后加14个0好像可以,我测试的几个数据为0.005、0.015、0.025至0.095,你有时间的话帮我试一下,麻烦了
作者: zhuyiwen    时间: 2002-6-2 06:12
与整个数的长度有关,也就是有效位数
作者: zhuyiwen    时间: 2002-6-2 07:36
请参见:

http://www.accxp.com/club/topic.cgi?forum=2&topic=798
作者: ail    时间: 2003-5-23 07:20
不怎么明白,可以有通用的吗
作者: ail    时间: 2003-5-24 22:55
请高手总结一下




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3