ehxz 发表于 2008-7-1 09:55:41

关于pb中四舍五入出错的问题 round()出错

pb中当用到double型或是dec型是如果是特定数值的话,round没有问题,但是当定义变量并且是从别的变量带来的数值的话,会出现如:定义了变量aa(可能是double或是dec或是其他类型)然后从别的变量中获得数值13.505,那么经过round(aa,2)后会是13.50,此时应该是13.51对于四舍五入的理论上才对,这种现象对于这种例子里小数点第三位是5的情况下有时round或是string(。。。,‘#0。00’)等一般认为的办法下有时候是对的,有时候就像上面的情况是错的,这种现象非版本或是bug,而是数值类型问题,pb内部代码存在double,number数值型的浮点盈亏,比如说13.505的返回值,如果赋值给double型数值是13.505,但是用dec型接收的话就是13.50499999992。。。,这样如果round( ,2)后对于第三位并非5而是4了,盈亏差值0.00000000008等(比方),所以您round( ,2)或是其他办法后第三位为4,此时四舍五入就是13.50了,并非13.51,还有的情况就是也有可能是这种数值13.525,此时差值为13.5250000002,这样经过四舍五入后就表面上没有问题,得出的结果13.53是正确地,这就是为什么有时候四舍五入是对的有时候是错的(不同数值),

与此我们的解决办法很简单,统一dec类型,因为round或是string( ,'#0.00')类似的用到四舍五入函数返回dec类型,统一dec后不存在问题,同样数据窗口中用到dec型,如果用double浮点的话转换为dec或是double变量引用赋值给dec时也会出现浮点精度问题,所以尽量统一dec类型,如果确实用别的,需要通过位数限制转换来实现避免错误出现。最近看到以前帖子晾着没解决,特此说明,仅为个人理解,仅做参考
页: [1]
查看完整版本: 关于pb中四舍五入出错的问题 round()出错

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com