使用整数的十进制精度

时间:2015-11-10 20:46:26

标签: c printf

我正在用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。

关于如何解决这个问题的任何想法?如果我不完全清楚,请告诉我,我会提供更多信息

谢谢!

3 个答案:

答案 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)

结合您的答案:根据需要乘以101001000,但仍然使用%04d打印。