%g如何舍入浮点数?

虽然我在printf()使用%g作为格式说明符,但有时它会在小数点后向上舍入到2个位置,有时会达到3个位置,有时会达到4个位置……它是如何做到的?

实际上我们应该使用%g而不是%f%e作为浮点数?

%g格式说明符像%f那样进行舍入,但如果%f将导致4.234000 ,则%g将省略尾随零并打印4.234

当输出格式中最有意义的是某些数字打印为12345.6 ,应使用%g ,而略大的数字则打印为1.235e04

%g在使用%e%f之间自动“翻转”,具体取决于值,试图以与手持式计算器相同的方式显示尽可能多的信息。 此外,不包括%g尾随零和小数点。

对于%f转换,“precision”是小数点后的位数 ,而对于%g它是有效位数。
两种情况下的默认精度均为6。

来自printf手册 :

“double参数以f或e格式转换(或G转换为F或E)。精度指定有效位数。如果精度丢失,则给出6位数;如果精度为零,则对其进行处理如果样式e在转换时的指数小于-4或大于或等于精度时使用。尾随零从结果的小数部分中删除;小数点仅在后面跟随时出现至少一位数。“

我不是指“RTFM”,但您可能会在手册中找到有关控制精度和长度的内容。