简单C数字格式

简单C数字格式,c,formatting,floating-point,numbers,printf,C,Formatting,Floating Point,Numbers,Printf,这是一个非常简单的c问题 有没有一种方法可以格式化printf的浮点,使其具有xx个有效小数 所以我不是说,比如说,%5.3ffloat,但是如果我有 float x=0.00001899383 如果我想要最多前三个非零小数,我将如何输出0.0000189?“%.3g”将尝试以科学或固定格式输出三个有效数字 在bjg: 节目 #include <stdio.h> int main() { double a = 123456789e-15; int i = 0; for

这是一个非常简单的c问题

有没有一种方法可以格式化printf的浮点,使其具有xx个有效小数

所以我不是说,比如说,
%5.3f
float,但是如果我有

float x=0.00001899383
如果我想要最多前三个非零小数,我将如何输出0.0000189?

“%.3g”将尝试以科学或固定格式输出三个有效数字

在bjg:

节目

#include <stdio.h>

int main()
{
  double a = 123456789e-15;
  int i = 0;
  for( i=-10; i <= 10; ++i )
  {
    printf("%.3g\n", a );
    a *= 10;
  }
  return 0;
}

但这并不能解决问题的非零部分。这将仅显示前3位数字的格式regardless@bjg,不,它打印3个有效数字,但如果有多个前导零,则将使用指数表示法。彼得,谢谢!事实上,我只是在一个Obj-c应用程序中执行了几个c函数,并且很长一段时间都忘记了这些东西。正如Jamie所说,+1++1请注意,3位有效数字的示例数字是0.0000190
1.23e-07
1.23e-06
1.23e-05
0.000123
0.00123
0.0123
0.123
1.23
12.3
123
1.23e+03
1.23e+04
1.23e+05
1.23e+06
1.23e+07
1.23e+08
1.23e+09
1.23e+10
1.23e+11
1.23e+12
1.23e+13