%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”,但您可能会在手册中找到有关控制精度和长度的内容。