pow(10.0f,num);c语言,浮点数四舍五入问题

#8

有看到C语言中使用如下的一段代码,讨论讨论

typedef double FLOAT;

typedef FLOAT *P_FLOAT;

typedef    unsigned int    U32;

方法一:按部就班

/*

* 对调整系数值进行小数点截位

* @f : 待处理的浮点数(即为入口参数,也为出口参数)

* @bits: 保留的小数点后位数

*/

void round_float(P_FLOAT f,int bits) {

static const int DECIMAL_BASE = 10;

U32 n,scale,m;

int i;

scale = 1;

for (i=0;i/*多乘1位,手动四舍五入*/

scale *= DECIMAL_BASE;

n = (*f) * scale;

m = n % 10;

/*手动四舍五入*/

if (m <5)

n = n - m;

else

n = n - m +10;

*f = ((FLOAT)n /scale);

}

方法二:尾数进位判断

void round_float(P_FLOAT f,int bits) {

static const int DECIMAL_BASE = 10;

U32 n,scale,m;

int i;

scale = 1;

for (i=0;i

scale *= DECIMAL_BASE;

scale *= 2;

/*

*此法比较巧妙,本质来说还是判断

*待舍入的目标小数为是大等于5还是小于5.

*/

n = (*f) * scale;

/*

* 当目标小数大等于5,n值各位必然为奇数

* 因为该位上的数x2后造成进位,而进位前的

* 乘积为偶数,两数相加为奇数.否则不进位,为偶

*/

n += (n % 2);

*f = ((FLOAT)n /scale);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值