setprecision控制浮点数输出精度,单独使用时设定总有效数字位数,配合fixed或scientific时则控制小数点后位数,需注意其持久性及浮点数本身精度限制。

在C++里,
setprecision
当我们谈到
setprecision
<iomanip>
fixed
scientific
最基本的用法,你只需要在
std::cout
#include <iostream>
#include <iomanip> // 别忘了这个头文件
int main() {
double pi = 3.1415926535;
double e = 2.71828;
std::cout << "默认精度下 pi: " << pi << std::endl; // 可能会显示很多位
std::cout << "setprecision(5) 下 pi: " << std::setprecision(5) << pi << std::endl; // 5位有效数字
std::cout << "setprecision(3) 下 e: " << std::setprecision(3) << e << std::endl; // 3位有效数字
// setprecision会一直生效,直到你再次设置它
std::cout << "继续输出 pi (仍是3位有效数字): " << pi << std::endl;
return 0;
}运行这段代码你会发现,
setprecision(5)
pi
3.1416
setprecision
setprecision(3)
e
2.72
setprecision
立即学习“C++免费学习笔记(深入)”;
setprecision
这确实是个值得深挖的问题,因为我个人在初学时就栽过跟头。
setprecision
setprecision(3)
123.456
123
0.001234
0.00123
举个例子:
#include <iostream>
#include <iomanip>
int main() {
double val1 = 123.456789;
double val2 = 0.000123456;
double val3 = 1.0;
std::cout << std::setprecision(4); // 设置总有效数字为4
std::cout << "val1 (123.456789): " << val1 << std::endl; // 输出 123.5
std::cout << "val2 (0.000123456): " << val2 << std::endl; // 输出 0.0001235
std::cout << "val3 (1.0): " << val3 << std::endl; // 输出 1
return 0;
}你看,
123.456789
123.5
1
2
3
4
5
4
5
0.000123456
0.0001235
setprecision
fixed
scientific
这里才是
setprecision
setprecision
std::fixed
std::scientific
std::fixed
std::fixed
setprecision
#include <iostream>
#include <iomanip>
int main() {
double value = 123.456789;
std::cout << std::fixed << std::setprecision(2) << value << std::endl; // 输出 123.46
std::cout << std::fixed << std::setprecision(4) << value << std::endl; // 输出 123.4568
double small_val = 0.000123;
std::cout << std::fixed << std::setprecision(5) << small_val << std::endl; // 输出 0.00012
// 注意,这里即使是0,也会显示小数点后的位数
std::cout << std::fixed << std::setprecision(2) << 1.0 << std::endl; // 输出 1.00
return 0;
}看到了吗?
123.456789
setprecision(2)
fixed
123.46
std::scientific
std::scientific
setprecision
#include <iostream>
#include <iomanip>
int main() {
double big_value = 123456789.0;
double small_value = 0.00000012345;
std::cout << std::scientific << std::setprecision(3) << big_value << std::endl; // 输出 1.235e+08
std::cout << std::scientific << std::setprecision(5) << small_value << std::endl; // 输出 1.23450e-07
return 0;
}这种方式在处理极大或极小的数值时非常有用,能让数据保持可读性,同时控制精度。对我来说,理解了
fixed
scientific
setprecision
setprecision
在实际的开发中,
setprecision
财务计算与报表: 这是最典型的场景。银行应用、电商平台订单金额、税费计算等,通常都要求金额精确到小数点后两位。这时,
std::fixed << std::setprecision(2)
123.456
123.46
123.5
setprecision(4)
科学计算与工程数据: 在物理模拟、统计分析、传感器数据处理等领域,我们可能需要根据实验精度或测量仪器的精度来显示浮点数。有时需要固定小数位数(比如测量值),有时需要固定有效数字位数(比如误差范围)。
fixed
scientific
日志记录与调试: 当你在调试一个复杂的数值算法时,精确地输出中间变量的值可以帮助你快速定位问题。通过
setprecision
注意事项:
流操纵符的持久性:
setprecision
fixed
scientific
std::cout.precision()
std::cout.flags()
#include <iostream>
#include <iomanip>
void print_formatted(double val) {
// 保存当前流的状态
std::ios_base::fmtflags original_flags = std::cout.flags();
std::streamsize original_precision = std::cout.precision();
std::cout << "格式化输出: " << std::fixed << std::setprecision(2) << val << std::endl;
// 恢复流的状态
std::cout.flags(original_flags);
std::cout.precision(original_precision);
}
int main() {
double price = 19.998;
double tax_rate = 0.05;
std::cout << "原始输出: " << price << std::endl; // 正常输出
print_formatted(price * (1 + tax_rate)); // 格式化输出
std::cout << "恢复后输出: " << price << std::endl; // 仍然正常输出,不受影响
return 0;
}浮点数精度限制: 无论你
setprecision
float
double
setprecision
double
四舍五入规则: C++标准库的
setprecision
总的来说,
setprecision
fixed
scientific
以上就是c++++中setprecision怎么读的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号