祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 5051|回复: 0

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

[复制链接]

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

[复制链接]
ehxz

主题

0

回帖

58万

积分

管理员

积分
588551
贡献
在线时间
小时
2008-7-1 09:55:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
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类型,如果确实用别的,需要通过位数限制转换来实现避免错误出现。最近看到以前帖子晾着没解决,特此说明,仅为个人理解,仅做参考
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

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

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-11-22 09:22 , Processed in 0.030296 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表