截取浮点数的小数位数

方法一:借助floor函数

对于一个double a = 1.234567;

如果我只取小数点后3位,那么我可以这样做:

a = floor(a*1000)/1000;

floor函数的作用是返回一个小于传入参数的最大整数,所以对于正数来说,就是抹去小数点后的部分。

它具有多种形式:

double floor (      double x );  
float floor (       float x );  
long double floor ( long double x );  


注意一:如果是负数,则需要在floor之后+1。

a = (floor(a*1000)+1)/1000;


注意二:如果是负数,并且浮点数本来位数也不够,那么下面就会算错。

double a = -1.2;

a = (floor(a*1000)+1)/1000;


方法二:借助sprintf和sscanf

借助一个辅助的字符串空间。

int main()
{
    double d = 1.2345;
    double r;
    char str[8]; //辅助空间
    
    sprintf( str, "%0.2f", d); //截取后转化为字符串类型
    sscanf( str, "%lf", &r);//由字符串类型恢复为double类型
    
    cout<<str<<endl;
    cout<<r;
   return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值