可能重复:
将数字四舍五入到 C 中的 2 个小数位
我还没有在 c 中找到带有double round(double d, int digits)
像这里这样的签名的函数。当我尝试构建时出现错误:
错误:函数“round”的参数太多
如何在 C 中舍入小数点后 N 位?
可能重复:
将数字四舍五入到 C 中的 2 个小数位
我还没有在 c 中找到带有double round(double d, int digits)
像这里这样的签名的函数。当我尝试构建时出现错误:
错误:函数“round”的参数太多
如何在 C 中舍入小数点后 N 位?
使用递归(对于某些数字值会很慢)
#include <math.h>
double my_round(double x, unsigned int digits) {
if (digits > 0) {
return my_round(x*10.0, digits-1)/10.0;
}
else {
return round(x);
}
}
一种可能更快的方法,但它依赖于对慢速pow
函数的一次调用:
#include <math.h>
double my_round(double x, unsigned int digits) {
double fac = pow(10, digits);
return round(x*fac)/fac;
}
一种更快的方法是预先计算具有可能幂的查找表并使用它来代替pow
.
#include <math.h>
double fac[]; // population of this is left as an exercise for the reader
double my_round(double x, unsigned int digits) {
return round(x*fac[digits])/fac[digits];
}
虽然“已回答”给出了一个不错的答案,但这里有一个适用于任意大数字的答案:
double round1(double num, int N) {
ASSERT(N > 0);
double p10 = pow(10,N);
return round(num* p10) / p10;
}
当然,如前所述,浮点数没有固定的十进制位数,例如,如果您调用,则不能保证将其打印为 3.70000 printf("%8.5f", round1(3.7519, 1));
。
这是一个(非常)简单的功能,
double round1(double num, int N) {
int temp=(int) num*pow(10,N);
double roundedN= temp/pow(10,N);
return roundedN;
}
在 C 标准中,不存在这样的功能。不管怎样,你可以自己写。
#include <math.h>
/* Round `n` with `c` digits after decimal point. */
double nround (double n, unsigned int c)
{
double marge = pow (10, c);
double up = n * marge;
double ret = round (up) / marge;
return ret;
}
另请参阅上面关于浮点“小数点”的评论。