我正在用C语言编写一个uC,我需要显示一个带4个精度数字的浮点数。这里的事情是我的号码不是真正的浮点型。我有两个不同整数变量中的整数部分和数字的小数部分。假设:int digit和int decimal。
我尝试使用printf("%d。%d");当我的十进制数是6524时,这样可以正常工作,但问题出现时它正好是65,因为它没有显示4位小数。
我尝试使用printf("%d。%04d");但当我的小数部分正好是65时,它显示0065,这在数学上是不正确的(我需要6500)
我找了printf的任何参数,最后用零填充但找不到任何东西。所有这些都带有前导零,在这种情况下对我没用。
我还要检查我的号码是否为10,100或1000的次要值,并分别乘以1000,100或10。但是当小数部分正好为0时它将不起作用,因为0 * 1000仍然是0而不是0000。
关于如何解决这个问题的任何想法?如果我不完全清楚,请告诉我,我会提供更多信息
谢谢!
答案 0 :(得分:1)
由于printf
会返回打印的字符数,因此您可以执行此操作,有点笨拙,如下所示:
printf("%d.", int_part);
int digits = printf("%d", frac_part);
while (digits++ < 4) putchar('0');
我不得不说,这是一个表示浮点数的非常古怪的形式,你可能真的想重新考虑它。
答案 1 :(得分:0)
另一种可能的方法是将小数部分转换为字符串,然后用0填充它:
int main() {
int i, d, len;
char p[10];
i = 189;
d = 51;
// convert the number to string and count the digits
snprintf(p, 10, "%d", d);
len = strlen(p);
while (len < 4) {p[len] = '0'; len++;}
p[len] = '\0';
fprintf(stdout, "%d.%s\n", i, p);
// you can also go back to int
d = atoi(p);
fprintf(stdout, "%d.%d\n", i, d);
}
答案 2 :(得分:0)
结合您的答案:根据需要乘以10
,100
或1000
,但仍然使用%04d
打印。