std::format 默认浮点精度不固定,采用“最短表示”规则,确保唯一可逆解析且数字最少;如1.23456789输出为”1.23457″,非四舍五入bug;需控制精度须显式指定{:.3f}等格式符。
std::format 默认浮点精度是多少?为什么输出看起来像四舍五入到6位?
std::format 对 float 和 double 默认使用“最短表示”规则(类似 std::to_chars),不是固定小数位数。它会自动省略末尾零,并在保证唯一可逆解析的前提下用最少数字表达该值——所以 1.23456789 可能输出为 "1.23457",这不是 bug,是设计行为。
若需控制小数位数,必须显式指定格式说明符:
-
{:.3f}→ 固定小数点后 3 位(如3.14159→"3.142") -
{:.6g}→ 最多 6 个有效数字,自动选择f或e格式 -
{:08.2f}→ 总宽 8,右对齐,小数点后 2 位,不足补前导零(注意:0填充只对数值格式生效,且仅当宽度 > 实际长度时起作用)
如何用 std::format 实现左对齐、居中、填充字符?
对齐和填充语法与 Python 的 str.format() 高度一致,但 C++20 目前只支持 (左对齐)、<code>^(居中)、>(右对齐),默认右对齐;填充字符必须紧邻对齐符号,且只能是单字节 ASCII 字符(如空格、'0'、'*')。
常见组合示例:
立即学习“C++免费学习笔记(深入)”;