printf() 可以生成“-.5”吗?对于值(-0.5)?
即可以告诉 printf 忽略小数点前面的零吗?
i.e. can printf
be told to ignore zero when it precedes the decimal point?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
即可以告诉 printf 忽略小数点前面的零吗?
i.e. can printf
be told to ignore zero when it precedes the decimal point?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
对于 ISO C99 中指定的所有内容,这是不可能的。转换说明符的文档说:
由于其他转换说明符不会打印十进制浮点数,因此这是根本不可能的。除非您找到引入另一个转换说明符的供应商扩展。但这样你的程序就不再是严格有效的 C 程序了。
我想到的最好的解决方法是:
With all the things that are specified in ISO C99, this is not possible. The documentation for the conversion specifiers says:
Since the other conversion specifiers would not print a decimal floating-point number, this is impossible at all. Unless you find a vendor extension that introduces another conversion specifier. But then your program would not be strictly valid C anymore.
The best workaround that comes to my mind is:
当然可以,但恐怕你对我的回答不会太满意:
Sure it can, but I'm afraid you won't be too happy with my answer:
一句话:不...
In a word: No...
<罢工>是的。使用
%g
格式说明符代替%f
,即printf("%g", -0.5);
如果您对%g
以指数表示法打印一些数字的方式不满意,另一种方法是使用snprintf
写入临时字符串缓冲区,然后计算在使用printf("%.*s", num_nonzero_places, tmp);
写出之前,先检查末尾的零个数,或者您可以删除零并使用fputs
。现在我意识到问题是删除前导零,而不是尾随零。在这种情况下,我知道的最好方法是使用
snprintf
写入临时字符串,然后在写入时跳过第一个字符(如果该字符为“0”)。如果值为负数,您还需要替换“-”号。一种方法是:Yes. Use the%g
format specifier instead of%f
, i.e.printf("%g", -0.5);
If you're unhappy with the way%g
prints some numbers in exponential notation, the alternative is to usesnprintf
to write to a temporary string buffer, and then count the number of zeros at the end before writing it outwithprintf("%.*s", num_nonzero_places, tmp);
, or you could just remove the zeros and usefputs
.Now I realize the question is about removing the leading zero, not trailing zeros. In this case, the best way I know is to use
snprintf
to write to a temporary string, then skip the first character when writing it out if that character is '0'. You'll need to replace the '-' sign too if the value is negative. One way to do this:然后将 double 或 float 转换为 char:
说明:
Convert your double or float to a char then:
Explination:
请参阅 printf 规范 和精度部分。你可以这样做
printf("%+0.4f", -0.5);
See the printf spec, and the precision section. You can do
printf("%+0.4f", -0.5);