四舍五入(c++实现)

(转载)原文章:https://www.cnblogs.com/kiritozhj/p/10019292.html
四舍五入(c++实现)
思路:如果直接对一个浮点数取四舍五入,不保留小数部分,那么我们的思路是:正数加上0.5,负数减去0.5,代码如下:

#include <iostream>

using namespace std;

int round1(double number)
{
    return (number>0.0)?(number+0.5):(number-0.5);
}

或者

#include <iostream>
#include <cmath>

using namespace std;

int round2(double number)
{
    return (number>0.0)?floor(number+0.5):ceil(number-0.5);
}

如果要对浮点数按位四舍五入,就要换种方式。比如要对1.12345保留4位小数,先乘以10000(10^4,几位小数就是几次方),然后加0.5,得11235,再除以10000,得到1.1235。代码如下:

//按位四舍五入
#include <iostream>
#include <stdio.h>
using namespace std;

double round3(double number,int bits) //number->浮点数,bits->保留位数
{
    for(int i=0;i<bits;++i)
    {
        number*=10;
    }
    number=(long long)(number+0.5);
    for(int i=0;i<bits;++i)
    {
        number/=10;
    }
    return number;
}

int main()
{
    double x;
        int n;
    cin>>x>>n;
    printf("%.15f",round3(x,n));
}

但这样做也有个bug,就是double的精度只在小数点后15-16位之间(正数15位,负数16位),所以最多也只能精确到这样子,n更大就失效了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值