создание функции округления

Я пытаюсь сделать что-то очень простое, но у меня болит голова.

Мне нужно написать функцию, которая будет округлять значение двойного аргумента до числа десятичных знаков, указанного в 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;

}

0

Решение

Вы можете получить лучшие результаты с чем-то вроде:

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);, Не то чтобы это обязательно лучше, но когда все, что вы делаете, это математика, вы не необходимость выполнять каждую операцию в отдельной строке.

1

Другие решения

Ваш round() возвращается result = x * pow(10, n)Так чего же ты ожидал?

2

По вопросам рекламы [email protected]