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 に答える