C++取整与保留小数位的问题与解决方法

目录


一  保留小数位的方法;

        1.1 printf 格式化输出:

                可以用于处理浮点数不能用于处理整数;

                举例一:输入一个整数保留两位小数,再输入一个浮点数,保留三位小数;

#include <iostream>
using namespace std;
int main()
{
	short a;
	cin >> a;
	printf("%.2f\n", a);
	double b;
	cin >> b;
	printf("%.3f", b);
	return 0;
}

运行结果:例如,依次输入4,3.67878;

4
0.00
3.67878
3.679
C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 90000)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

1.2 setprecision用法;

        1.2.0总述;

                需要加头文件#include <iomanip>;

                使用操作符将小数截短显示时,数据将进行四舍五入处理;

        1.2.1基本格式setprecision(int n)

                cout<<setprecision(int n)<<input<<endl;

                含义为输出n位有效数字,注意是有效数字而不是小数位数;

                直接输出或者设置精度为默认值0,都是输出六位有效数字;

                代码及运行结果:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	cout << "setprecision(int n)方法:" << endl;
	cout << "无限循环小数:" << endl;
	double x = 10.0 / 7;
	for (int i = 0; i < 8; i++)
		cout <<"保留"<<i<<"位有效数字 "
			 << setprecision(i) << x << endl;
	cout << "有限小数:" << endl;
	double y = 10.0 / 8;
	for (int i = 0; i < 6; i++)
		cout << "保留" << i << "位有效数字 "
		<< setprecision(i) << y << endl;
	return 0;
}

运行结果:

setprecision(int n)方法:
无限循环小数:
保留0位有效数字 1
保留1位有效数字 1
保留2位有效数字 1.4
保留3位有效数字 1.43
保留4位有效数字 1.429
保留5位有效数字 1.4286
保留6位有效数字 1.42857
保留7位有效数字 1.428571
有限小数:
保留0位有效数字 1
保留1位有效数字 1
保留2位有效数字 1.2
保留3位有效数字 1.25
保留4位有效数字 1.25
保留5位有效数字 1.25

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 86848)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

      1.2.2 setiosflags(ios::fixed)

               cout<<setiosflags(ios::fixed)<<setprecision(int n)<<input<<endl;

                含义为保留n位小数,注意,这里的n是n位小数的意思;

                不设置精度,显示6位有效小数;

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	cout << "setprecision(int n)方法:" << endl;
	cout << "无限循环小数:" << endl;
	double x = 10.0 / 7;
	for (int i = 0; i < 8; i++)
		cout <<"保留"<<i<<"位小数 "
			 <<setiosflags(ios::fixed)
			 << setprecision(i) << x << endl;
	cout << "有限小数:" << endl;
	double y = 10.0 / 8;
	for (int i = 0; i < 6; i++)
		cout << "保留" << i << "位小数 "
		<< setiosflags(ios::fixed)
		<< setprecision(i) << y << endl;
	return 0;
}

运行结果为:

setprecision(int n)方法:
无限循环小数:
保留0位小数 1
保留1位小数 1.4
保留2位小数 1.43
保留3位小数 1.429
保留4位小数 1.4286
保留5位小数 1.42857
保留6位小数 1.428571
保留7位小数 1.4285714
有限小数:
保留0位小数 1
保留1位小数 1.2
保留2位小数 1.25
保留3位小数 1.250
保留4位小数 1.2500
保留5位小数 1.25000

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 96368)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

   1.2.3 setiosflags(ios::scientific)

cout<<setiosflags(ios::scientific)<<setprecision(int n)<<input<<endl;

                含义为输出格式为科学计数法格式,保留n位小数;

                不设置精度时,显示六位有效的小数位;

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	cout << "setprecision(int n)方法:" << endl;
	cout << "无限循环小数:" << endl;
	double x = 1000.0 / 7;
	for (int i = 0; i < 8; i++)
		cout << "保留" << i << "位小数 "
		<< setiosflags(ios::scientific)
		<< setprecision(i) << x << endl;
	cout << "有限小数:" << endl;
	double y = 100.0 / 8;
	for (int i = 0; i < 6; i++)
		cout << "保留" << i << "位小数 "
		<< setiosflags(ios::scientific)
		<< setprecision(i) << y << endl;
	return 0;
}

运行结果为:

setprecision(int n)方法:
无限循环小数:
保留0位小数 1e+002
保留1位小数 1.4e+002
保留2位小数 1.43e+002
保留3位小数 1.429e+002
保留4位小数 1.4286e+002
保留5位小数 1.42857e+002
保留6位小数 1.428571e+002
保留7位小数 1.4285714e+002
有限小数:
保留0位小数 1e+001
保留1位小数 1.2e+001
保留2位小数 1.25e+001
保留3位小数 1.250e+001
保留4位小数 1.2500e+001
保留5位小数 1.25000e+001

C:\Users\uaer\source\repos\12.26\x64\Debug\12.26.exe (进程 86048)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

 二  取整

        2.1 强制类型转换

                强制类型转换分为显示类型转换和隐式类型转换;

#include <iostream>
using namespace std;
int main()
{
	int x = 2.6;//隐式类型转换;
	cout << "x=" << x << endl;
	double y = 2.67321;//显示类型转换;
	//显示类型转换的格式为static_cast<希望转换成的数据类型 只能为基本数据类型>(输入数据);
	cout << "y=" << static_cast<int>(y) << endl;
	return 0;
}

运行结果为:

x=2
y=2

         2.2取整函数;

                2.2.1四舍五入取整 round()函数;

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double x = 3.1415926;
	double y = 2.71828;
	cout << round(x) << endl;
	cout << round(y) << endl;
	return 0;
}

运行结果为: 

3
3

         2.2.2向上取整 ceil()函数;

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double x = 3.1415926;
	double y = 2.71828;
	cout << ceil(x) << endl;
	cout << ceil(y) << endl;
	return 0;
}

运行结果为:

4
3

         2.2.3向下取整 floor()函数;

        其实隐式类型转换也是一种向下取整;

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double x = 3.1415926;
	double y = 2.71828;
	cout << floor(x) << endl;
	cout << floor(y) << endl;
	return 0;
}

 运行结果为:

3
2

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月22日
下一篇 2023年12月22日

相关推荐