Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
Nevermind_qqq
72 / 58 / 24
Регистрация: 25.06.2014
Сообщений: 358
#1

Округление числа до ближайшего целого - C++

24.10.2014, 01:08. Просмотров 8127. Ответов 10
Метки нет (Все метки)

Часто видел в темах в вопросом "как округлить до ближайшего целого" ответы вроде "использовать функцию
C++
1
a=floor(a+0.5);
или
C++
1
a=round(a);
Например a=1.6 , функции выдают 2.
При a=1.4 функции выдают 1.

Вроде бы все верно, НО
При a=1.49 функции выдают 1
Т.е. чтобы заставить их работать для чисел с точностью больше 1-го знака после запятой нужно их записать в виде
C++
1
a=floor(a+0.555555555555555);
или
C++
1
a = round(a + 0.055555555555555);
Теперь число a = 1.444444444444445 округляет до 2,
а число а= 1.444444444444444 округляет до 1

P.S. если изобрел велосипед, то извините
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2014, 01:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Округление числа до ближайшего целого (C++):

Округление дробного числа до целого в большую сторону. - C++
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то...

Написать программу, результат работы которой - округление дробного числа до целого по математическим правилам. - C++
Здравствуйте, Друзья. Задание: Написать программу, результат работы которой - округление дробного числа до целого по математическим...

Дано действитёльное число х. Получить целую часть *) числа х; затем — число х, округленное до ближайшего целого; затем — число х без дробных цифр. - C++
Здравствуйте помогите написать программу. Дано действитёльное число х. Получить целую часть *) числа х; затем — число х, округленное до...

Округление до большего целого - C++
Спецы, нужна ваша помощь, второй день убил - ничего понять не могу! Есть такой OpenSource проект Kannel, по работе пришлось его...

Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K - C++
Помогите выполнить задание. Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K (цифры в...

Поиск ближайшего числа в массиве - C++
Смысл заключается в следующем: дана шкала в миллиметрах и показатель уровня заполнения емкости, соответствующая данной шкале, т.е. 1 мм =...

10
Jewbacabra
Эксперт PHP
2747 / 2335 / 875
Регистрация: 24.04.2014
Сообщений: 7,044
24.10.2014, 01:18 #2
Nevermind_qqq,
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
Вроде бы все верно, НО
При a=1.49 функции выдают 1
А разве это не верно? 1 ближе к 1.49, чем 2
0
Genn55
375 / 222 / 41
Регистрация: 26.12.2012
Сообщений: 732
24.10.2014, 01:21 #3
C++
1
floor (x * 10 + 0.5) / 10;
Еак будет правильней
0
Jewbacabra
Эксперт PHP
2747 / 2335 / 875
Регистрация: 24.04.2014
Сообщений: 7,044
24.10.2014, 01:23 #4
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
P.S. если изобрел велосипед, то извините
Ты меня конечно извини, но это даже не велосипед с квадратными колесами, это больше похоже на это
http://www.youtube.com/watch?v=NUNEm6DWsU8
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3976 / 2200 / 553
Регистрация: 18.10.2014
Сообщений: 3,814
24.10.2014, 01:38 #5
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
При a=1.49 функции выдают 1
Т.е. чтобы заставить их работать для чисел с точностью больше 1-го знака после запятой нужно их записать в виде
C++
1
a=floor(a+0.555555555555555);
Откуда все это и зачем? Округление для 1.49 должно давать именно 1. Т.е. 'a=floor(a+0.5)' делает все правильно.
0
Nevermind_qqq
72 / 58 / 24
Регистрация: 25.06.2014
Сообщений: 358
24.10.2014, 16:13  [ТС] #6
TheCalligrapher, Jewbacabra, т.е. по вашему 1.49 ~ 1.5 это не верно? Округление же идет от меньшего разряда 1.4444445~1.4444450~1.4444500~1.4445000~1.4450000~1.4500000~1.5000000~2.0000000
0
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
24.10.2014, 16:20 #7
Ты плохо понимаешь суть округления. Учитывается 1 разряд. Если округляешь до целых, то учитываешь разряд десятых, а 1.49 ~ 1.5 - это ты округлил до десятых по разряду сотых.
0
Genn55
375 / 222 / 41
Регистрация: 26.12.2012
Сообщений: 732
24.10.2014, 16:24 #8
Округление до целого ведется по старшему разряду. Если вы хотите округлить 1,44257,то округляться до целого будет 1,4 младшие разряды уже не имеют никакого значения.Вы же не станете утверждать,что 1,5 <1,49999.
0
castaway
Эксперт С++
4919 / 3027 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
24.10.2014, 20:26 #9
Nevermind_qqq, с какой стати число 1.4444445 должно округлится до двух, если оно меньше чем 1.5 ?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3976 / 2200 / 553
Регистрация: 18.10.2014
Сообщений: 3,814
24.10.2014, 21:03 #10
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
TheCalligrapher, Jewbacabra, т.е. по вашему 1.49 ~ 1.5 это не верно? Округление же идет от меньшего разряда 1.4444445~1.4444450~1.4444500~1.4445000~1.4450000~1.4500000~1.5000000~2.0000000
Округления бывают разные. На Википедии есть целая статья о разнообразных округлениях. Но в данном случае мы ведем о вполне конкретном округлении - округлении к ближайшему. Такое округление всегда определялось только первым "отрезаемым" разрядом. Вопросы возникают с округлением 1.5, по понятным причинам. А с округлением 1.49, 1.447 и т.п. никаких вопросов нет.

Ваша логика с двухшаговым округлением мне не понятна. Да, если делать округление в два шага, то можно получить другой результат. Но с чего бы это вдруг мы должны делать его в два шага?

Предположите, например, что вас попросили округлить целое число 146 до ближайшей сотни (т.е. до числа, кратного 100). Мне, например, очевидно, что такой ближайшей сотней является число 100. Но если мы применим вашу логику, то получится, что мы сначала должны округлить 146 до ближайшего десятка, т.е. до 150, а уже потом округлять до сотни. И получить в результате 200. Простите, но как ни верти ближайшей сотней к числу 146 является все таки 100, а не 200.
0
Nevermind_qqq
72 / 58 / 24
Регистрация: 25.06.2014
Сообщений: 358
24.10.2014, 21:21  [ТС] #11
Окей, убедили
0
24.10.2014, 21:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2014, 21:21
Привет! Вот еще темы с ответами:

Цикл while: вычисление ближайшего сверху числа степени 2 - C++
задача сводится к вычислению ближайшего сверху числа степени 2, как это сделать через while?

Расписать процедуру высчитывания ближайшего числа к случайному - C++
Ребята, пишу свою мини-игру. И возникла загвоздка. Суть игры: чье число окажется ближе к случайно выпавшему числу, тот победил. Диапазон...

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

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


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

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

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