请帮我写一个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