四舍五入的问题

一、如果是不保留小数的四舍五入(也就是只留下整数部分)
用floor函数
头文件
floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个值)。
虽然函数不是准确的四舍五入,但是我们加上一点改动就能让其变成真正的四舍五入
具体用法如下
有一个浮点数x,想要获得它四舍五入后的结果,写法:x=floor(x+0.5)

#include <cstdio>
#include <iostream>
#include <cmath> 
using namespace std;
int main()
{
	float x;
	cin>>x;
	x=floor(x+0.5);
	cout<<x<<endl;
	return 0;
} 
为什么,你可以根据floor函数的定义仔细想一下。

二、保留小数点后n(n>=1)位四舍五入
举个例子,一个小数点后两位的浮点数四舍五入保留一位小数
可以用多种方法实现
方法一:依然利用floor函数
思路就是先把要转化的数乘到要进行四舍五入的那位小数前,然后利用floor四舍五入,再除回去。

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath> 
using namespace std;
int main()
{
	float x;
	cin>>x;
	x=x*10;
	x=floor(x+0.5);
	x/=10;
	printf("%.1f",x);
	return 0;
}

方法二:利用强制转换

思路其实和floor差不多的,先把要转化的数乘到要进行四舍五入的那位小数前,然后加上0.5,强制转换成int后再除回去。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath> 
using namespace std;
int main()
{
	float x;
	cin>>x;
	x=x*10+0.5; 
	x=(int)x;
	x=x/10;
	printf("%.1f",x);
	return 0;
}

方法三:round函数
和floor也差不多的
Round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。可是当保留位跟着的即使是5,有可能进位,也有可能舍去,机会各50%。这样就会造成在应用程序中计算有误。

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath> 
using namespace std;
int main()
{
	float x;
	cin>>x;
	x=x*10;
	x=round(x);
	x=x/10;
	printf("%.1f",x);
	return 0;
}

可能还有其他方法,欢迎补充

猜你喜欢

转载自blog.csdn.net/qq_43332389/article/details/85111617