Rol*_*lig 3

对于 ISO C99 中指定的所有内容,这是不可能的。转换说明符的文档说:

f,F: [...] 如果出现小数点字符,则其前面至少出现一位数字。[...]

e,E: [...] 小数点字符之前有一位数字(如果参数非零,则该数字非零)[...]

g,G: [...] 转换为样式fe[...]

由于其他转换说明符不会打印十进制浮点数,因此这是根本不可能的。除非您找到引入另一个转换说明符的供应商扩展。但这样你的程序就不再是严格有效的 C 程序了。

我想到的最好的解决方法是:

double number = 0.5;
char buf[80];
char *number = buf;
if (snprintf(buf, sizeof buf, "%f", number) <= 0)
  goto cannot_happen;

while (*number == '0')
  number++;
printf("%s\n", number);
Run Code Online (Sandbox Code Playgroud)