printf中%g的奇怪输出

时间:2017-06-14 12:56:01

标签: c printf

据我所知,%gprintf的转化规则是使用%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 ,但它不会。谁能帮我理解这个?

1 个答案:

答案 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。指数X1。这意味着P > X ≥ −4为真(6 > 1 ≥ −4),输出使用f(或F)说明符和精度6 - 1 - 1打印(等于4并且是你看到的精度。

简而言之,输出实际上应该是它。