创建一个舍入函数

时间:2013-02-12 01:01:40

标签: c++ function rounding

尝试做一些非常简单的事情,但它给了我一个非常大的头痛。

我需要编写一个函数,将double参数的值四舍五入到n指定的小数位数。

我已经完成了大部分工作,但由于某种原因,结果= .....只是计算舍入算法的第一行(见下文)

结果不是将数字四舍五入,而是简单地将小数点移动n指定的位数。我的代码如下:

#include <iostream>
#include <cmath>
using namespace std;

double round(double x, int n)

{

double result;

result = 

x * pow(10, n);

x = x + 0.5;

x = floor(x);

x = x / pow(10, n);

 return result;

}

int main()

{

cout << round(-2.9, 0) << endl;

cout << round(-2.59, 1) << endl;

cout << round(.0059, 2) << endl;

cout << round(1.23467, 3) << endl;

cout << round(9.999999, 4) << endl;

return 0;

}

2 个答案:

答案 0 :(得分:2)

您的round()会返回result = x * pow(10, n),那么您还期待什么?

答案 1 :(得分:1)

你可能会得到更好的结果:

double round(double x, int n) {
    x = x * pow(10, n);
    x = x + 0.5;
    x = floor(x) / pow(10, n);

    return x;
}

问题在于,在原始代码中,您指定了result = x * pow(10, n);,然后使用x代替result继续执行所有其余操作。

您还可以将一些语句组合在一起,以减少方法中的行数,甚至可以使用return floor(x * pow(10, n) + 0.5) / pow(10, n);之类的单行。这不一定更好,但当你所做的只是数学时,你不需要需要来执行每一行操作。