0

试图做一些真正简单的事情,但这让我非常头疼。

我需要编写一个函数,将 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;

}
4

2 回答 2

2

你的round()回报result = x * pow(10, n),你还期待什么?

于 2013-02-12T01:05:09.757 回答
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);继续执行所有其余操作。 xresult

您还可以结合一些语句来减少方法中的行数,甚至可以使用单行语句,例如return floor(x * pow(10, n) + 0.5) / pow(10, n);. 并不是说这一定更好,但是当您所做的只是数学时,您不需要自己的行上执行每个操作。

于 2013-02-12T01:06:08.060 回答