据我所知,%g
中printf
的转化规则是使用%e
或%E
,如果指数小于-4
或大于%f
或等于精度;否则使用printf("%g %G\n", 10.123456789, 10.12345); // output: 10.1235 10.1235
。不打印尾随零和尾随小数点。
然而,下面的输出很奇怪:
%g
因为1.012346e+01
的精确度是6,我猜它会输出1. rails new demo
2. cd demo
3. rake db:create
4. rails g scaffold product name:string price:float
5. rake db:migrate
6. rails server
,但它不会。谁能帮我理解这个?
答案 0 :(得分:3)
来自this printf
(and family) reference:
如果非零,则设P等于精度,如果未指定精度则设为6,如果精度为0,则设为1。然后,如果具有样式E的转换将具有指数X:
- 如果P> X≥-4,转换为f或F型,精度为P-1-X。
- 否则,转换采用样式e或E且精度为P-1。
由于您使用默认精度,因此P
等于6
。指数X
为1
。这意味着P > X ≥ −4
为真(6 > 1 ≥ −4
),输出使用f
(或F
)说明符和精度6 - 1 - 1
打印(等于4
并且是你看到的精度。
简而言之,输出实际上应该是它。