sha*_*kin 5 c floating-point double printf string-formatting
即可以printf告诉它在小数点之前忽略零?
对于 ISO C99 中指定的所有内容,这是不可能的。转换说明符的文档说:
f,F: [...] 如果出现小数点字符,则其前面至少出现一位数字。[...]
e,E: [...] 小数点字符之前有一位数字(如果参数非零,则该数字非零)[...]
g,G: [...] 转换为样式
f或e[...]
由于其他转换说明符不会打印十进制浮点数,因此这是根本不可能的。除非您找到引入另一个转换说明符的供应商扩展。但这样你的程序就不再是严格有效的 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)