C:printf的浮点值


74

我想在逗号后打印一个浮点值,该值具有2个整数和6个十进制数字。如果我只是使用,printf("%f", myFloat)我会得到一个被截断的值。

我不知道这种情况是否总是在C语言中发生,或者只是因为我在微控制器中使用C语言(确切地说是CCS),但是在参考文献中它告诉%f我们:截断的浮点数。

如果我的浮点数是44.556677,我"44.55"只打印出前两位十进制数字。

所以问题是...我该如何打印我的6位数字(只有其中的6位数字,以防万一我在那之后有零)?


4
%2.6f如果您的运行时库支持,则听起来像正确的格式字符串。
乔恩

2
如果您正在使用,float那么在任何情况下都不会获得8个有意义的有效十进制数字。您要求的精度比数据类型的精度更高。最接近的浮动汇率44.55667744.55667 87719 72656 25
David Heffernan

@DavidHeffernan有多少个有意义的数字?
罗曼·拜什科(Royal Byshko)2011年

现在是提出“不是真实的浮点数”的适当时间:freshsources.com/FPNotReal.pdf
Kennet Belenky 2011年

6
@barlop六年后,我想我会和它一起住的人
Roman Rdgz

Answers:


143

您可以这样做:

6代表小数点分隔符之后的位数。


谢谢!我虽然同意,但我只是想这不可能那么容易!
Roman Rdgz

6
2不代表小数点前的位数,这意味着最低字段宽度(这将已经大于2),所以这里什么都不做。
caf

21

printf("%9.6f", myFloat) 指定一种格式,该格式总共包含9个字符:点前2位,点本身以及点后6位。


4
%09.6f也可能是一个选择。
caf

2
@dasblinkenlight with printf("%9.6f", myFloat),如果我在点前输入3位数,那么它仍会在点前输出3位数。你能解释为什么吗?
xyz

网址为unitedunit.com/…的网站之一,将%3.2f解释为(打印为至少3宽且精度为2的浮点数)。所以我现在感到困惑
xyz


5

k是您要打印的字符总数。k = x + 1 + y+ 1代表点),float_variable_name是您要打印的float变量。

假设您要在小数点前打印x位数字,并在其后打印y位数字。现在,如果float_variable_name之前的位数小于x,则它将自动在其前面加上许多零。




0

尝试这些方法以澄清浮点打印中的正确对齐问题

输出是

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.