ChatGPT解决这个技术问题 Extra ChatGPT

C: printf 一个浮点值

我想打印一个浮点值,它在逗号后有 2 个整数位和 6 个小数位。如果我只使用 printf("%f", myFloat) 我会得到一个截断的值。

我不知道这是否总是在 C 中发生,或者仅仅是因为我将 C 用于微控制器(确切地说是 CCS),但在参考文献中它告诉 %f 得到了这个:截断的浮点数。

如果我的浮点数是 44.556677,我将打印出 "44.55",只有前两位小数。

所以问题是......我怎样才能打印我的 6 位数字(只有其中的六个,以防万一我在那之后有零或其他东西)?

如果您的运行时库支持,%2.6f 听起来像是正确的格式字符串。
如果您使用的是 float,那么无论如何您都不会得到 8 个有意义的十进制数字。您要求比数据类型具有更高的精度。最接近 44.556677 的浮点数是 44.55667 87719 72656 25
@DavidHeffernan 有多少有意义的数字?
现在是提出“浮点数不是实数”的适当时机:freshsources.com/FPNotReal.pdf
@barlop 六年后,我想我会忍受它的人

S
S.S. Anne

你可以这样做:

printf("%.6f", myFloat);

6 表示小数分隔符后的位数。


谢谢!我虽然想过,但我只是觉得这不可能那么容易!
2 不表示小数点前的位数,它表示最小 total 字段宽度(已经大于 2),所以这里它什么也不做。
S
Sergey Kalinichenko

printf("%9.6f", myFloat) 指定总共 9 个字符的格式:点前 2 位、点本身和点后 6 位。


%09.6f 也可能是一个选项。
@dasblinkenlight 与 printf("%9.6f", myFloat) ,如果我在点之前给出 3 位数字,那么它仍然会在点之前打印 3 位数字。你能解释一下为什么吗?
网站 codingunit.com/… 之一将 `%3.2f` 解释为(打印为浮点数,宽度至少为 3,精度为 2)。所以我现在很困惑
@xyz 在 C 的 printf a %N 中,其中 N 是一个数字,始终定义字段的 complete 输出的总体 最小 宽度。 %6s 总是至少打印 6 个字符(如果字符串更长,则更多)。较短的输出将被填充(在这种情况下,在左侧,使用 -N 在右侧填充)。 花车也不例外%3f 打印至少 3 个字符,因此 1.0 输出为 __1(两个前导空格显示为 _)其中 1.1 输出为 1.1 没有填充,它已经有 3 个字符。因此,在 %N.Mf 中,点前至少有 N-M-1 个空格字符。
J
J0e3gan
printf("%0k.yf" float_variable_name)

这里 k 是您要打印的字符总数。 k = x + 1 + y(点的 + 1)和 float_variable_name 是您要打印的浮点变量。

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


T
Tarion
printf("%.<number>f", myFloat) //where <number> - digit after comma

http://www.cplusplus.com/reference/clibrary/cstdio/printf/


小心点! f 说明符必须在位数之后,因此 printf("%.numberf", myFloat) 为您提供有用的链接!
R
Roberto A. Foglietta

尝试这些来澄清浮点打印中的右对齐问题

printf(" 4|%4.1lf\n", 8.9);
printf("04|%04.1lf\n", 8.9);

输出是

 4| 8.9
04|08.9

P
Pang

使用 %.6f。这将打印 6 位小数。


S
Shankar Raju

您需要在 printf 语句中使用 %2.6f 而不是 %f


这是不正确的。格式 "%2.6f" 表示 2 个字符的总宽度,小数点后 6 个字符。
@ValeriyVan 这有点像吹毛求疵,但我认为这很重要:这里的 2 没有错,但它是高度多余的(甚至不是多余的),这通常告诉我们,作者对 printf 的工作方式感到困惑。 %2.6f 表示“至少 2 个字符宽,点后有 6 个数字”。因为我们总是会看到至少 8 个字符,所以 2 太低了,在这里没有任何效果,它需要 9 或更高才能产生一些效果。请注意,这里我们不讨论数学:在 %+9.6f 中仍然不需要 9,因为 %+.6f 始终具有至少 9 的宽度:符号、数字、点、6 位