分享与deepseek交流的c++知识 p1
在C++中,setprecision 是用于控制输出流中浮点数精度的操纵符,它定义在 <iomanip> 头文件中。
基本用法
#include <iostream>
#include <iomanip> // 必须包含这个头文件
using namespace std;
int main() {
double pi = 3.141592653589793;
// 默认情况下,显示6位数字(包括整数和小数部分)
cout << "默认输出: " << pi << endl;
// 使用setprecision控制精度
cout << "设置精度为3: " << setprecision(3) << pi << endl;
cout << "设置精度为5: " << setprecision(5) << pi << endl;
cout << "设置精度为10: " << setprecision(10) << pi << endl;
return 0;
}
setprecision的行为模式
1. 默认模式(浮点模式)
显示总的有效数字位数:
double num = 123.456789; cout << setprecision(5) << num << endl; // 输出:123.46(5位有效数字) cout << setprecision(7) << num << endl; // 输出:123.4568(7位有效数字)
2. 固定小数点模式(与fixed结合)
显示固定的小数位数:
double num = 123.456789; cout << fixed << setprecision(2) << num << endl; // 输出:123.46 cout << fixed << setprecision(5) << num << endl; // 输出:123.45679
3. 科学计数法模式(与scientific结合)
double num = 123.456789; cout << scientific << setprecision(2) << num << endl; // 输出:1.23e+02
常用组合示例
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double price = 99.9876;
// 示例1:货币格式(两位小数)
cout << "价格: $" << fixed << setprecision(2) << price << endl;
// 示例2:科学计算
double distance = 384400000; // 地月距离(米)
cout << "地月距离: " << fixed << setprecision(0) << distance << " 米" << endl;
cout << "科学表示: " << scientific << setprecision(2) << distance << " 米" << endl;
// 示例3:保留多位小数
double pi = 3.141592653589793;
cout << "π值: " << fixed << setprecision(15) << pi << endl;
// 恢复默认设置
cout.unsetf(ios::fixed | ios::scientific);
cout << "恢复默认: " << setprecision(6) << pi << endl;
return 0;
}
实际应用场景
1. 财务计算
double total = 1567.897; cout << "总金额: $" << fixed << setprecision(2) << total << endl;
2. 表格格式化输出
cout << left << setw(10) << "姓名"
<< right << setw(10) << "分数" << endl;
cout << left << setw(10) << "张三"
<< right << fixed << setprecision(2) << setw(10) << 95.5 << endl;
cout << left << setw(10) << "李四"
<< right << setw(10) << 88.666 << endl;
3. 批量设置精度
// 一次性设置所有后续输出的精度 cout << fixed << setprecision(3); cout << 12.34567 << endl; // 输出:12.346 cout << 0.123456 << endl; // 输出:0.123 cout << 1234.5678 << endl; // 输出:1234.568
注意事项
- 包含正确的头文件:必须包含
<iomanip> - 作用范围:
setprecision会影响之后所有的浮点数输出,直到再次改变设置 - 默认精度:默认精度是6位有效数字
- 四舍五入:会进行四舍五入
- 重置设置:使用
cout.precision()可以恢复默认设置
// 保存和恢复精度设置 streamsize old_precision = cout.precision(); // 保存当前精度 cout << fixed << setprecision(4) << 12.345678 << endl; cout.precision(old_precision); // 恢复原精度
与C语言的printf比较
// C++方式
cout << fixed << setprecision(2) << num;
// C语言方式
printf("%.2f", num);
setprecision 提供了更面向对象的方式来控制输出精度,是C++ I/O流的重要组成部分。

查看5道真题和解析