setprecision控制浮点数输出精度,具体行为取决于是否与fixed或scientific结合:单独使用时控制有效数字位数,结合fixed控制小数点后位数,结合scientific控制科学计数法下的有效数字位数。

在C++中,
setprecision
<iomanip>
fixed
scientific
setprecision
<iomanip>
#include <iostream>
#include <iomanip> // 必须包含这个头文件
int main() {
double pi = 3.1415926535;
double small_num = 123.456789;
double large_num = 123456789.12345;
std::cout << "默认精度 (通常是6位): " << pi << std::endl;
// 示例1: 仅使用 setprecision
// 此时 setprecision(n) 控制的是总的有效数字位数
std::cout << "setprecision(4): " << std::setprecision(4) << pi << std::endl;
std::cout << "setprecision(4): " << std::setprecision(4) << small_num << std::endl;
std::cout << "setprecision(4): " << std::setprecision(4) << large_num << std::endl;
// 示例2: 结合 fixed
// 此时 setprecision(n) 控制的是小数点后的位数
std::cout << std::fixed; // 设置为定点表示法
std::cout << "fixed + setprecision(2): " << std::setprecision(2) << pi << std::endl;
std::cout << "fixed + setprecision(2): " << std::setprecision(2) << small_num << std::endl;
std::cout << "fixed + setprecision(2): " << std::setprecision(2) << large_num << std::endl;
// 示例3: 结合 scientific
// 此时 setprecision(n) 再次控制的是总的有效数字位数 (科学计数法表示)
std::cout << std::scientific; // 设置为科学计数法
std::cout << "scientific + setprecision(3): " << std::setprecision(3) << pi << std::endl;
std::cout << "scientific + setprecision(3): " << std::setprecision(3) << small_num << std::endl;
std::cout << "scientific + setprecision(3): " << std::setprecision(3) << large_num << std::endl;
// 恢复默认设置 (或者使用 std::defaultfloat)
std::cout << std::defaultfloat;
std::cout << "恢复默认: " << std::setprecision(6) << pi << std::endl;
return 0;
}说实话,刚接触
setprecision
std::fixed
std::scientific
单独使用 setprecision(n)
std::defaultfloat
setprecision(n)
n
std::setprecision(4)
3.14159
3.142
12345.67
1.235e+04
与 std::fixed
setprecision(n)
std::fixed
setprecision(n)
n
n
n
std::fixed << std::setprecision(2)
3.14159
3.14
5.0
5.00
与 std::scientific
setprecision(n)
std::scientific
setprecision(n)
1.234e+05
n-1
n
std::scientific << std::setprecision(3)
12345.67
1.23e+04
我个人经验是,当你觉得浮点数输出不对劲时,第一件事就是检查是不是
fixed
scientific
setprecision
立即学习“C++免费学习笔记(深入)”;
在使用
setprecision
setprecision
一个最常见的陷阱就是混淆了“总有效数字”和“小数点后位数”。很多人想当然地认为
setprecision(2)
123.456
123.5
0.001234
0.0012
std::fixed
另一个需要注意的点是流操纵符的“粘性”。
setprecision
fixed
scientific
std::cout << std::fixed << std::setprecision(2);
std::defaultfloat
setprecision
std::cout
此外,浮点数的内部表示和舍入行为也可能导致预期不符。
setprecision
double
float
0.1
setprecision
所以,当输出不符合预期时,先检查
fixed
scientific
setprecision
虽然
setprecision
setprecision
首先,我们不能忽视
std::fixed
std::scientific
std::defaultfloat
setprecision
setprecision
std::fixed
setprecision
std::scientific
setprecision
std::defaultfloat
setprecision
接着,
std::showpoint
std::cout << std::showpoint << std::setprecision(2) << 5.0;
fixed
5.00
5.
对于更复杂的格式化需求,尤其是需要将浮点数格式化为字符串而不是直接输出到控制台时,
std::stringstream
stringstream
stringstream
std::cout
#include <iostream>
#include <iomanip>
#include <sstream> // 用于 stringstream
int main() {
double value = 123.456789;
std::stringstream ss;
// 使用 stringstream 进行格式化,不影响 std::cout
ss << std::fixed << std::setprecision(3) << value;
std::string formatted_value = ss.str();
std::cout << "通过 stringstream 格式化: " << formatted_value << std::endl;
std::cout << "原始 std::cout 状态不受影响: " << value << std::endl; // 仍然是默认精度
// 还可以直接操作流对象的成员函数,虽然不如操纵符常用
// 获取当前精度
std::streamsize old_precision = std::cout.precision();
std::cout.precision(4); // 设置精度为4
std::cout << "使用 .precision(4): " << value << std::endl;
std::cout.precision(old_precision); // 恢复旧精度
return 0;
}此外,
printf
<cstdio>
%f
%.2f
%g
C++ 在这方面确实给了我们很多选择,有时候选择太多反而让人有点选择困难症。但通常来说,对于大多数浮点数输出的精度控制,
setprecision
fixed
scientific
stringstream
以上就是c++++中setprecision函数的用法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号