(转载)原文章: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更大就失效了。