![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Добрый день!
Любопытно узнать как можно округлить double число. Тока варианты типа
непредлагать т.к. это просто отсечение, а не округление!!!!!!!! ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
int a = (int) (x > 0 ? x + 0.5 : x - 0.5);
-------------------- ... |
|||
|
||||
DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Стандартных функций не знаю но первое что приходит в голову это написать функцию самому !
Перевести double в строку , если надо округлить до i-го знака берем (i + 1)-ый знак если он больше 5-ти то i-ый знак ++ , отскаем все после i-го знака , переводим опять в double и возвращаем юзверу )) ![]() P.S. на C++ писать легче чем на кириллице ! ![]()
![]() и что получится ? Это сообщение отредактировал(а) DigitSphinx - 27.5.2007, 19:03 |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
? -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Стандартное округление: 3.67 округлиться до 4, а 3.45 - до 3. nickless, нет в стандарте функции round -------------------- ... |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
2 nickless
на round ругается типа Error C2065: 'round' : undeclared identifier ![]() |
|||
|
||||
DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Samotnik Тебе нужен результат типа int или именно округление double’a до какой-то точности ?
|
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
2 DigitSphinx
Округление double !!!!! int не причем!!! |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Samotnik, чего орать-то
![]() Учись вопросы задавать нормально. Под "просто" округлением обычно понимают именно округление до int. Округление double до заданной точности можно сделать так:
Где GRID - требуемая точность, скажем, 0.001. -------------------- ... |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
2 Earnest
Я вообще-то не ору !!!!! Я вполне спокоен слушаю LedZeppelin Stairway To Heaven Вод! ![]() ![]() Я умею вопросы задовать!!!! вопрос типа ИМХО вполне вменяемый и понятный. Проще только вот так-вот можно: Как из числа 3.99999 получить 4, из 12. 3 получить 12 !!! Так понятнее? |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
имхо
для этого подойдет и это -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Romikgy, сейчас Samotnik опять спросит "при чем тут int!"
Это жара, наверное ... ![]() -------------------- ... |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
может поможет, функция (,,) и пример ее использования
|
|||
|
||||
88andrey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
а если число до точки будет больше int'a то это не пройдет |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Не ну я все понимаю, но не могу понять вот этого , обьясните плз кто шарит
Значит как я понимаю: (int) - это преобразование , затем если x>0 то x + 0.5 иначе x - 0.5 Ну это все при том что х double. и че? ![]() расскажите плз как ето работает!! |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
сначала вычисляется выражение в скобках: x > 0 ? x + 0.5 : x - 0.5. Эта конструкция (тернарный оператор) дает x + 0.5, если x > 0, и x - 0.5 во всех остальных случаях. Далее результат преобразовывается к int. Все. поясните, пожалуйста. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
zkv, возможно, имеется ввиду округление числа типа 1234.56 * 10^58 до 10^59?
|
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
1234.56 * 10^58 == 1.23456 * 10^61, округляем, получаем 10^59? ![]() ![]() я, вроде, понял, что ты имел ввиду. Я просто объяснил, что было записано в строке int a = (int) (x > 0 ? x + 0.5 : x - 0.5); А сказать наверняка, что имеется ввиду может только автор топика ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
sgrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
есть в с++ стандартные функции округления - floor - вниз и ceil - вверх.
если double всегда будет в области int, то можно просто написать int a = x + 0.5. Если double в вычислениях может быть больше int, то можно сделать x - floor(x), и получить остаток. А там смотреть - больше 0,5 или меньше 0,5 и округлять в нужную сторону. и ещё как codelord написал можно.. только я round функцию не видел в с++.... |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Где-то давно я ее видел... Но мне могло показаться. Или она не-ANSI была. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
юзать тогда int64 ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
sgrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
||||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Угу. Многие производители компилеров добавляют в стандартную библиотеку. Но сие не есть стандарт. |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Да без проблем ![]() Нуна 2,368787945646987897564654798 округлить до 2 и ф-ция, кот вы мне порекомендовали не работает(к сожалению). Пэ.Эс. Да и ланно, закрываю тему, уж по-другому давно сделал!!!!!!! Всем спасибо!!!!!! ![]() |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
и вы утверждаете, что в результате работы такой программы, у вас не 2 выводится? ![]()
порекомендовал вообще то не я, но рекомендацию поддерживаю ![]() |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Не совсем так, просто я писал на MFC курсач и там были большие вычисления (от начала до конца строки ![]() Просто я попроще вопрос решил задать, т.к. думал, что есть какая-нить стандартная ф-ция для округления, но ее не оказалось. ![]() А простые вычисления(типа таких как вы написали) округляются без проблем ![]() |
|||
|
||||
Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: 4 Всего: 4 |
round появилась в языке Си в стандарте C99, а в С++ как известно входит только C89 так что этой функции в C++ пока нет. |
|||
|
||||
s_a_s_h_a |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 20.7.2004 Где: Петрозаводск Репутация: нет Всего: 1 |
![]() Это сообщение отредактировал(а) s_a_s_h_a - 1.6.2011, 08:27 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |