Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Округление до N знаков после запятой в с++

#cpp


есть число типа double, например 4.64452675

Как в С++ сделать округление до N знаков после запятой? Либо отсечение? Не нашел
нужной функции
    


Ответы

Ответ 1



static const double powerOfTen[] = { 1.0, 10.0, 100.0, ... }; double truncated = std::trunc(d * powerOfTen[N]) / powerOfTen[N]; double rounded = std::floor(d * powerOfTen[N] + 0.5) / powerOfTen[N];

Ответ 2



#include #include #include // для round using namespace std; int main(int argc, char** argv) { double value = 4.64459675; // Положительные числа cout << round(value*10)/10 << endl; // Округление до первого знака cout << round(value*100)/100 << endl; // второго cout << round(value*1000)/1000 << endl; // третьего cout << round(value*10000)/10000 << endl; // четвертого // Отрицательные числа cout << round(-value*10)/10 << endl; // Округление до первого знака cout << round(-value*100)/100 << endl; // второго cout << round(-value*1000)/1000 << endl; // третьего cout << round(-value*10000)/10000 << endl; // четвертого return EXIT_SUCCESS; } Результат: 4.6 4.64 4.645 4.6446 -4.6 -4.64 -4.645 -4.6446 Вывод Количество нолей равно числу знаков после запятой

Ответ 3



В стримах (типа std::wstringstream)есть такое: std::setw(4): wstream<

Ответ 4



Думаю проще: std::stringstream stream; stream << std::fixed << std::setprecision(N) << d; stream >> d;

Ответ 5



#include #include using namespace std; int main() { double value; //число doudle denom; //желаемая точность cout<<(value-remainder(value,denom)); return 0; }

Ответ 6



double _trim_tail ( const double& p_value , const int p_decimal_places = 4 , const int p_make_round = 1 ) { double exponent = round( log10(fabs(p_value)) ); double res = p_value * pow(10,-exponent); if (fabs(res) < 1.0) { res = res * 10.0; exponent -= 1; } else if (fabs(res) >= 10.0) { res = res / 10.0; exponent += 1; } if (p_make_round != 0) { res = round(res * pow(10,p_decimal_places)) / pow(10,p_decimal_places); } else { res = trunc(res * pow(10,p_decimal_places)) / pow(10,p_decimal_places); } res = res * pow(10,exponent); return res; }

Комментариев нет:

Отправить комментарий