Округление до десяток

 
0
 
C++
ava
wallstreet | 26.03.2013, 14:55
Добрый день.
Как округлить целое число до десяток? К примеру есть число 154256, должно быть 154260.
На ум приходит только такой способ:

int main()
{
    char ch;
    
    char str[7];
    double iper = 158455.000;
    double temp_per = iper / 10;
    int cur_iper; 
    sprintf(str, "%.0f", temp_per);
    cur_iper = atoi(str) * 10; 
    cout << "first val = " << iper << "\n";
    cout << "cur val   = " << cur_iper;

    cin >> ch;
    return 0;
}



есть ли стандартные функции (методики) подобных преобразований?
Kommentare (7)
ava
Crafty | 26.03.2013, 15:01 #

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    char ch;
    
    double iper = 158455.000;
    //int temp_per = floor(iper/10+0.5)*10; // просто C
    int temp_per = round(iper/10)*10; // C++11
    cout << "first val = " << iper << "\n";
    cout << "cur val   = " << temp_per;
    cin >> ch;
    return 0;
}



ava
wallstreet | 26.03.2013, 15:16 #

int temp_per = round(iper/10)*10; // C++11

Это что за функция round()?
Вариант типо "просто С" именно то что искал! smile 
ava
Crafty | 26.03.2013, 15:24 #
Цитата (wallstreet @  26.3.2013,  15:16 findReferencedText)
Это что за функция round()?

std::round
ava
math64 | 26.03.2013, 15:26 #
floor округляет ближе к 0.
Чтобы из него сделать округление к ближайшему целому, нужно +0.5 для положительных и -0.5 для отрицательных.

int temp_per = floor(iper / 10. + (iper > 0 ? 0.5 : -0.5)) * 10.;

или

int temp_per = floor((iper + (iper > 0 ? 5. : -5.)) / 10.) * 10.;

ava
wallstreet | 26.03.2013, 15:27 #
аа видимо std::round() .. Я понял, благодарю!

später ergänzt:
Цитата (math64 @  26.3.2013,  15:26 findReferencedText)
Чтобы из него сделать округление к ближайшему целому, нужно +0.5 для положительных и -0.5 для отрицательных.

спасибо, учту!
ava
volatile | 26.03.2013, 20:02 #
Цитата (math64 @  26.3.2013,  15:26 findReferencedText)
нужно +0.5 для положительных и -0.5 для отрицательных

ненужно.
просто прибавить .5 и все.

result =  floor (v / 10. +.5) * 10;
ava
math64 | 27.03.2013, 07:27 #
Да, ошибся. floor() округляет к меньшему.
К меньшему по абсолютной величине округляет приведение к int:

printf("%f\n", floor(-0.75)); //  -1.000000
printf("%d\n", (int)(-0.75)); // 0
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden