贝利信息

C++怎么保留两位小数 C++控制输出精度iomanip使用教程【格式】

日期:2026-01-26 00:00 / 作者:尼克
必须搭配 std::fixed 和 std::setprecision(2) 才能稳定输出两位小数,因为单独 setprecision(2) 控制总有效数字位数(如 123.456 变为 1.2e+02),而 std::fixed 使 setprecision 意义变为小数点后位数,且其状态持久需手动取消。

直接用 std::fixed + std::setprecision(2),否则 setprecision 控制的是有效数字位数,不是小数位数。

为什么 setprecision(2) 单独用不行?

因为 std::setprecision 默认作用于「总有效数字位数」,不是小数点后几位。比如 123.456setprecision(2) 会输出 1.2e+02(即 120),而不是 123.46123.45

必须搭配 std::fixed(固定小数点格式)才能让 setprecision 意义变为「小数点后保留几位」。

怎么写才稳定输出两位小数?

最简可靠写法:

#include 
#include 
int main() {
    double x = 3.14159;
    std::cout << std::fixed << std::setprecision(2) << x << '\n'; // 输出: 3.14
}

注意:

常见踩坑场景

这些写法容易出错:

真正要注意的其实是状态持久性:一旦设置了 std::fixed,它会一直生效直到显式取消。很多 bug 都是前一段代码设了 fixed,后面另一段数值处理逻辑意外被格式化成两位小数,还查不出原因。