Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
The special one
13 / 13 / 0
Регистрация: 09.03.2012
Сообщений: 112
#1

Быстрое округление числа

26.02.2013, 11:29. Просмотров 1183. Ответов 5
Метки нет (Все метки)

Здравствуйте уважаемые программисты! Подскажите как быстрее всего округлить число?
C++
1
double a = 4.78531
необходимо получить
C++
1
a = 4.80000
Я знаю один способ
C++
1
a = double(int(a*10 + 0.5))/10
Есть еще варианты?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 11:29
Ответы с готовыми решениями:

Быстрое преобразование числа
Здравствуйте уважаемые программисты! Подскажите пожалуйста как быстрее всего...

Быстрое нахождение максимального делителя числа
Всем привет! Столкнулся с такой проблемой, у меня дано число n \leq 10 ^ 18....

Округление числа
Кто-нибудь может подробно-подробно объяснить, как округлять числа в C++. А то я...

Округление числа
Не пойму, почему компилятор пишет Выражение должно иметь целочисленный или...

Округление числа
Если разложение в ряд тейлора и поиск сумы и заданая точность е.И вот нам надо...

5
SatanaXIII
Супер-модератор
Эксперт С++
5768 / 2766 / 375
Регистрация: 01.11.2011
Сообщений: 6,725
Завершенные тесты: 1
26.02.2013, 11:43 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <math.h>
 
int main(int argc, char* argv[])
{
    int s = 10; // Точность. Сколько после запятой.
    double number = 4.78531;
    double down, up;
 
    down = floor(number*s)/s;
    up = ceil(number*s)/s;
 
    printf("original number     %5.5lf\n", number);
    printf("number rounded down %5.5lf\n", down);
    printf("number rounded up   %5.5lf\n", up);
 
 
cin.ignore(1);
return 0;
}
1
Psixodelik
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
26.02.2013, 11:46 #3
Можно пробовать через функции ceil и floor (из библиотеки cmath). Только тут есть проблема, мы не можем округлять числа с точкой, но можно выкрутиться так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <cmath>
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    double l = 4.576332;
 
    double n = std::ceil(l*1000)/1000;
 
    std::cout << n << std::endl;
    
   return 0;
}
На выходе получим 3.577

Если что, вот поясняю, что мы делаем:
1) Умножаем наше числа на нужную степень десятки(десятые, сотые, тысячные и т.д.)
2) С помощью функций floor(округление в меньшую сторону) или ceil(в большую) мы округляем наше число.
3) Делим число на нашу степень.

Грубо говоря, это тоже самое, что у тебя, просто сделано чуть по другому

эххх, SatanaXIII опередил
1
SatanaXIII
Супер-модератор
Эксперт С++
5768 / 2766 / 375
Регистрация: 01.11.2011
Сообщений: 6,725
Завершенные тесты: 1
26.02.2013, 11:55 #4
Цитата Сообщение от Psixodelik Посмотреть сообщение
эххх, SatanaXIII опередил

А пример из справки опередил даже меня.
Но с
C++
1
2
3
int s = 10000;
double a = 4.78531;
a = double(int(a*s + 0.5))/s;
тоже прикольно. Только в профиль.
1
Psixodelik
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
26.02.2013, 11:59 #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение

А пример из справки опередил даже меня.
Но с
C++
1
2
3
int s = 10000;
double a = 4.78531;
a = double(int(a*s + 0.5))/s;
тоже прикольно. Только в профиль.
Так это грубо говоря и есть то, что знает ТС )
1
SatanaXIII
Супер-модератор
Эксперт С++
5768 / 2766 / 375
Регистрация: 01.11.2011
Сообщений: 6,725
Завершенные тесты: 1
26.02.2013, 12:19 #6
Psixodelik, я за то, что будет ли в таком двойном преобразовании ошибок (при переносе на 64, при больших значениях и так далее)? Я думаю, скорее всего это надо будет все ловить руками, а в ceil и floor как-то хочется верить, что уже все продумано.

P.S. Но вообще
C++
1
double(int(a*s + 0.5))/s;
- красиво - не надо math за собой тащить.
1
26.02.2013, 12:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 12:19

Быстрое нахождение количества делителей натурального числа
Как многие успели убедиться, часто требуется найти количество делителей...

Округление мелкого числа до 0
Всем привет, времени мало поэтому пишу сюда суть такова - нужно сделать...

Округление дробового числа
Здраствуйте . Нужно написать программку. У пользователя должны спросить какое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru