c语言中负浮点数取整,C 语言中对浮点数取整

今天做poj3299(很简单的一道题)遇到了浮点数取整的问题,根据网上的资料整理了一下。

假设输入的数据为

double a = 3.146;

要求保留两位小数。最通常的做法是:

double b = (int)((a *100) + 0.5) /100.0;

这样便能够得到3.15;

但是这样有个问题,当对负数进行四舍五入时,如-3.146,精确到3位进行四舍五入,应该是-3.15,但是使用上述方法得到的是-3.14.因此需要对输入的浮点数进行正负的判断。

double _round(double in)

{

if(in > 0.00)

return ((int)(in * 100) + 0.5)/ 100.0);

else

return ((int)(in * 100) - 0.5)/ 100.0);

}

但还有个问题,浮点数与0比较时不能这样写,所以应将与0比较的代码改为:

if(in > 0.00001)

所以,若要在加上精度的话,比较完整的代码是

double _round(double in,int precision)

{

long pre =1,i;

for(i = 0;i < precision;i++)

pre = pre * 10;

if( in > 1.0 / (pre * 10))

return ((int)(in * pre + 0.5) / (double)pre);

else

return ((int)(in * pre - 0.5) / (double)pre);

}

还有一种方法是用atof函数。

double _round(double in,int precision)

{

char buf[50],cmd[10];

sprintf(cmd,"%%.%df",precision);

sprintf(buf,cmd,in);

return atof(buf);

}

但是,所以貌似上述的方法都有精度的问题。

这儿有两篇帖子,可以看一下:

除了四舍五入的问题,从这个题中得到的一点经验有 scanf读取double类型的问题,应该这样读取

scanf("%lf",&d);

还有一点就是要想得到浮点数,作除法时需要注意变量(*1.0?)。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值