请帮我写一个C程序来回答我的问题。
问题-你没有C语言中的%f。如何编写一个C程序,在不使用%f的情况下打印小数点后两位?

最佳答案

#include <stdio.h>
#include <math.h>

int main(void)
{
    double num = 3.1416, a, b;

    b = modf(num, &a) * 10000;
    printf("%d.%d\n", (int)a, (int)b);
    return 0;
}

正如@mch所指出的,它不适用于3.04这样的数字,这是一个有效的解决方案(provided by Martin):
#include <stdio.h>
#include <math.h>

void dbl2str(char *s, double number, int decimals)
{
    double integral, fractional, epsilon = 1e-9;
    double round = 0.5 * pow(10, -decimals);
    int n, i;

    fractional = modf(number + round + epsilon, &integral);
    n = sprintf(s, "%d%c", (int)integral, decimals ? '.' : 0);
    for (i = 0; i < decimals; i++) {
        fractional *= 10;
        s[n + i] = '0' + (int)fractional;
        fractional = modf(fractional, &integral);
    }
    s[n + i] = '\0';
}

int main(void)
{
    char s[32];

    dbl2str(s, 3.1416, 4);
    printf("%s\n", s);
    dbl2str(s, 3.159, 4);
    printf("%s\n", s);
    dbl2str(s, 3.05, 3);
    printf("%s\n", s);
    return 0;
}

输出:
3.1416
3.1590
3.050

09-28 06:10