分享与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

注意事项

  1. 包含正确的头文件:必须包含 <iomanip>
  2. 作用范围setprecision 会影响之后所有的浮点数输出,直到再次改变设置
  3. 默认精度:默认精度是6位有效数字
  4. 四舍五入:会进行四舍五入
  5. 重置设置:使用 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流的重要组成部分。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务