我正在尝试制作一个程序来计算浮动包含的宽度或数量。我需要这个在控制台中制作好看的输出。例如,以下数字的宽度为:
4 (1)
23 (2)
0.3 (3 because the . has the width of one)
0.45 (4)
12.34 (5)
0 (1)
我试图检查number == 0
然后宽度是1
并完成,然后将数字乘以10
,直到没有小数float == (int)float
然后计算除10
以获得数字float < 0.
所需的次数我尝试过在互联网上找到的所有内容而没有任何真正的运气......
答案 0 :(得分:1)
只需使用snprintf计算您要打印的内容的长度,例如:
int main()
{
float num;
int len;
if (1 == scanf("%f", &num)) {
len = snprintf(NULL, 0, "%g", num);
printf("%g (%d)\n", num, len);
}
return 0;
}
答案 1 :(得分:0)
您可以尝试将float转换为字符串。
您可以根据需要使用snprintf
或类似的东西。
snprintf
的转换精度可能不是最好的。
您可能希望限制'.'
之后的字符数。
#include <stdio.h>
#include <string.h>
int main(void)
{
float num = -12345.678;
char str[32];
size_t counter = 0;
// freestyle solution
int len;
printf("Please input the number:\n");
if (1 == scanf("%f", &num)) {
len = snprintf(NULL, 0, "%g", num);
printf("\%g (%d)\n", num, len);
}
//sg7: improved one - '.' and '-' counted.
len = snprintf(str, 32, "%f", num);
printf("\n%s Number of characters: %zu",str, len);
return 0;
}
测试:
Please input the number:
-12.345678
-12.3457 (8)
-12.345678 Number of characters: 10
答案 2 :(得分:-1)
假设您的浮点数存储在变量f
中,您可以执行以下操作:
int width; char buffer[50];
width = sprintf(buffer,"%f",f);
请记住,浮点数通常以小数点后的六位数精度存储,因此像14.2这样的数字存储为14.200000,因此宽度为9而不是4.它也可能存储为13.999999所以记住这一点。