C语言中Round四舍五入的实现以及解析

匿名 (未验证) 提交于 2019-12-02 22:56:40

由于最近要上新系统,所以要公司重新写一套自己的gui框架,组长分配了一些任务给我,就是实现一些基本功能,当然源码还得看Qt的框架和源码重写系统。

由于Round的四舍五入的函数再0.5处具有不确定性,我们可以参照一下Qt源码的qRound的实现:

constexpr inline int qRound(double d)
{ return d >= 0.0 ? int(d + 0.5) : int(d - double(int(d-1)) + 0.5) + int(d-1); }

下面对上述函数做一些自己的解读:

在进行四舍五入考虑的时候考虑两点:

1.正负数操作的不一致性

2.0.5边界左右的操作的不一致性

当 d>0.0 时,int(d+0.5)的原理不加解释

当 d<0.0 时,分为两部分处理:

2)小数部分处理(0.5边界处理):d - double(int(d-1))+ 0.5的意义在于:小数部分-1+0.5可以将小数部分的转换为-1.xxx和0.xxx,经过取 int 之后获得整数

3)前两部汇整之后就是四舍五入之后的值了

Note:

刚刚自己实现了一个更简单的,测试了一下没有发现错误:

constexpr inline int myRound(float f)

{ return f >= 0 ? int ( f+0.5 ) : int ( f-0.5 ) ; }

如若有错,请即时留言,马上更正......

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!