| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Округление числа |
| Автор: Samotnik 27.5.2007, 18:27 | ||
| Добрый день! Любопытно узнать как можно округлить double число. Тока варианты типа
непредлагать т.к. это просто отсечение, а не округление!!!!!!!! |
| Автор: Earnest 27.5.2007, 18:55 |
| int a = (int) (x > 0 ? x + 0.5 : x - 0.5); |
| Автор: DigitSphinx 27.5.2007, 19:01 | ||
| Стандартных функций не знаю но первое что приходит в голову это написать функцию самому ! Перевести double в строку , если надо округлить до i-го знака берем (i + 1)-ый знак если он больше 5-ти то i-ый знак ++ , отскаем все после i-го знака , переводим опять в double и возвращаем юзверу )) P.S. на C++ писать легче чем на кириллице !
и что получится ? |
| Автор: nickless 27.5.2007, 19:05 | ||
? |
| Автор: Samotnik 27.5.2007, 19:18 |
| 2 Earnet эээээээ...... и какое отношение это имеет к округлению числа?????? |
| Автор: Earnest 27.5.2007, 19:20 |
Стандартное округление: 3.67 округлиться до 4, а 3.45 - до 3. nickless, нет в стандарте функции round |
| Автор: Samotnik 27.5.2007, 19:21 |
| 2 nickless на round ругается типа Error C2065: 'round' : undeclared identifier |
| Автор: DigitSphinx 27.5.2007, 19:24 |
| Samotnik Тебе нужен результат типа int или именно округление double’a до какой-то точности ? |
| Автор: Samotnik 27.5.2007, 19:27 |
| 2 DigitSphinx Округление double !!!!! int не причем!!! |
| Автор: Earnest 27.5.2007, 19:39 | ||
| Samotnik, чего орать-то Учись вопросы задавать нормально. Под "просто" округлением обычно понимают именно округление до int. Округление double до заданной точности можно сделать так:
Где GRID - требуемая точность, скажем, 0.001. |
| Автор: Samotnik 27.5.2007, 19:53 |
| 2 Earnest Я вообще-то не ору !!!!! Я вполне спокоен слушаю LedZeppelin Stairway To Heaven Вод! Я умею вопросы задовать!!!! вопрос типа ИМХО вполне вменяемый и понятный. Проще только вот так-вот можно: Как из числа 3.99999 получить 4, из 12. 3 получить 12 !!! Так понятнее? |
| Автор: Romikgy 27.5.2007, 20:20 |
| имхо для этого подойдет и это |
| Автор: Любитель 27.5.2007, 21:12 |
Причём лучше всего |
| Автор: Earnest 28.5.2007, 07:16 |
| Romikgy, сейчас Samotnik опять спросит "при чем тут int!" Это жара, наверное ... |
| Автор: codelord 28.5.2007, 08:18 | ||
может поможет, функция (,,) и пример ее использования
|
| Автор: 88andrey 28.5.2007, 08:52 | ||
а если число до точки будет больше int'a то это не пройдет |
| Автор: Samotnik 28.5.2007, 23:30 |
| Не ну я все понимаю, но не могу понять вот этого , обьясните плз кто шарит Значит как я понимаю: (int) - это преобразование , затем если x>0 то x + 0.5 иначе x - 0.5 Ну это все при том что х double. и че? расскажите плз как ето работает!! |
| Автор: zkv 29.5.2007, 15:03 |
сначала вычисляется выражение в скобках: x > 0 ? x + 0.5 : x - 0.5. Эта конструкция (тернарный оператор) дает x + 0.5, если x > 0, и x - 0.5 во всех остальных случаях. Далее результат преобразовывается к int. Все. поясните, пожалуйста. |
| Автор: JackYF 29.5.2007, 16:46 |
| zkv, возможно, имеется ввиду округление числа типа 1234.56 * 10^58 до 10^59? |
| Автор: JackYF 29.5.2007, 17:52 |
угу. Будем ждать. |
| Автор: sgrey 29.5.2007, 18:53 |
| есть в с++ стандартные функции округления - floor - вниз и ceil - вверх. если double всегда будет в области int, то можно просто написать int a = x + 0.5. Если double в вычислениях может быть больше int, то можно сделать x - floor(x), и получить остаток. А там смотреть - больше 0,5 или меньше 0,5 и округлять в нужную сторону. и ещё как codelord написал можно.. только я round функцию не видел в с++.... |
| Автор: JackYF 29.5.2007, 19:57 |
Где-то давно я ее видел... Но мне могло показаться. Или она не-ANSI была. |
| Автор: Romikgy 30.5.2007, 11:15 |
юзать тогда int64 |
| Автор: sgrey 31.5.2007, 22:28 | ||
ну я не отрицаю что её нет... надо порытся в справочниках будет по функциям... |
| Автор: Любитель 2.6.2007, 12:33 |
Угу. Многие производители компилеров добавляют в стандартную библиотеку. Но сие не есть стандарт. |
| Автор: Samotnik 5.6.2007, 00:43 |
Да без проблем Нуна 2,368787945646987897564654798 округлить до 2 и ф-ция, кот вы мне порекомендовали не работает(к сожалению). Пэ.Эс. Да и ланно, закрываю тему, уж по-другому давно сделал!!!!!!! Всем спасибо!!!!!! |
| Автор: zkv 5.6.2007, 03:55 | ||
и вы утверждаете, что в результате работы такой программы, у вас не 2 выводится?
порекомендовал вообще то не я, но рекомендацию поддерживаю |
| Автор: Samotnik 5.6.2007, 10:53 | ||
Не совсем так, просто я писал на MFC курсач и там были большие вычисления (от начала до конца строки Просто я попроще вопрос решил задать, т.к. думал, что есть какая-нить стандартная ф-ция для округления, но ее не оказалось. А простые вычисления(типа таких как вы написали) округляются без проблем |
| Автор: Дмитрий Т 11.7.2007, 12:29 | ||
round появилась в языке Си в стандарте C99, а в С++ как известно входит только C89 так что этой функции в C++ пока нет. |
| Автор: s_a_s_h_a 31.5.2011, 17:08 |
| |