Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
The special one
13 / 13 / 0
Регистрация: 09.03.2012
Сообщений: 112
#1

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

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

Здравствуйте уважаемые программисты! Подскажите как быстрее всего округлить число?
C++
1
double a = 4.78531
необходимо получить
C++
1
a = 4.80000
Я знаю один способ
C++
1
a = double(int(a*10 + 0.5))/10
Есть еще варианты?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 11:29     Быстрое округление числа
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 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;
}
Psixodelik
40 / 39 / 2
Регистрация: 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 опередил
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 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;
тоже прикольно. Только в профиль.
Psixodelik
40 / 39 / 2
Регистрация: 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;
тоже прикольно. Только в профиль.
Так это грубо говоря и есть то, что знает ТС )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 12:19     Быстрое округление числа
Еще ссылки по теме:

округление числа до десятых - C++
Как округлить число до целого я знаю, s=(s-floor(s)&lt;0.5)?floor(s):ceil(v) а как округлить, скажем, число 3.4643 до 3.5 ?

Погрешность числа (округление) - C++
Всем привет,есть алгоритм в котором производится операция умножения часто. В конечном итоге я получаю ответ равный 1, а верный ответ...

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

Вещественные числа и округление - C++
Или я туплю, или долго сижу, но вот никак не могу решить такую задачу: есть диапазон (напр. от 88 до 88.5), нужно в цикле обойти этот...


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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
26.02.2013, 12:19     Быстрое округление числа #6
Psixodelik, я за то, что будет ли в таком двойном преобразовании ошибок (при переносе на 64, при больших значениях и так далее)? Я думаю, скорее всего это надо будет все ловить руками, а в ceil и floor как-то хочется верить, что уже все продумано.

P.S. Но вообще
C++
1
double(int(a*s + 0.5))/s;
- красиво - не надо math за собой тащить.
Yandex
Объявления
26.02.2013, 12:19     Быстрое округление числа
Ответ Создать тему
Опции темы

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