我在c中找不到像here这样的签名double round(double d, int digits)
的函数。
当我尝试构建时,我得到一个错误:
错误:函数'round'的参数太多
如何在小数点后用N位数对C进行舍入?
答案 0 :(得分:3)
使用递归(对某些数字值来说会很慢)
#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];
}
答案 1 :(得分:0)
这是一个(非常)简单的功能,
double round1(double num, int N) {
int temp=(int) num*pow(10,N);
double roundedN= temp/pow(10,N);
return roundedN;
}
答案 2 :(得分:0)
在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;
}
另见上面关于浮点“小数点”的评论。
答案 3 :(得分:0)
虽然“回答”给出了一个不错的答案,但这里有一个适用于任意大数字的答案:
double round1(double num, int N) {
ASSERT(N > 0);
double p10 = pow(10,N);
return round(num* p10) / p10;
}
当然,如上所述,浮点数没有设定的十进制数字,如果你打电话给printf("%8.5f", round1(3.7519, 1));
,则不保证PRINT为3.70000。