Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/70: Рейтинг темы: голосов - 70, средняя оценка - 4.80
Nevermind_qqq
72 / 58 / 41
Регистрация: 25.06.2014
Сообщений: 358
1

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

24.10.2014, 01:08. Просмотров 12872. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

10
Jewbacabra
Эксперт PHP
3510 / 2917 / 1304
Регистрация: 24.04.2014
Сообщений: 8,867
24.10.2014, 01:18 2
Nevermind_qqq,
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
Вроде бы все верно, НО
При a=1.49 функции выдают 1
А разве это не верно? 1 ближе к 1.49, чем 2
0
Genn55
378 / 225 / 108
Регистрация: 26.12.2012
Сообщений: 744
24.10.2014, 01:21 3
C++
1
floor (x * 10 + 0.5) / 10;
Еак будет правильней
0
Jewbacabra
Эксперт PHP
3510 / 2917 / 1304
Регистрация: 24.04.2014
Сообщений: 8,867
24.10.2014, 01:23 4
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
P.S. если изобрел велосипед, то извините
Ты меня конечно извини, но это даже не велосипед с квадратными колесами, это больше похоже на это
http://www.youtube.com/watch?v=NUNEm6DWsU8
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4803 / 2454 / 687
Регистрация: 18.10.2014
Сообщений: 4,231
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 / 41
Регистрация: 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
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
24.10.2014, 16:20 7
Ты плохо понимаешь суть округления. Учитывается 1 разряд. Если округляешь до целых, то учитываешь разряд десятых, а 1.49 ~ 1.5 - это ты округлил до десятых по разряду сотых.
0
Genn55
378 / 225 / 108
Регистрация: 26.12.2012
Сообщений: 744
24.10.2014, 16:24 8
Округление до целого ведется по старшему разряду. Если вы хотите округлить 1,44257,то округляться до целого будет 1,4 младшие разряды уже не имеют никакого значения.Вы же не станете утверждать,что 1,5 <1,49999.
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
24.10.2014, 20:26 9
Nevermind_qqq, с какой стати число 1.4444445 должно округлится до двух, если оно меньше чем 1.5 ?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4803 / 2454 / 687
Регистрация: 18.10.2014
Сообщений: 4,231
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 / 41
Регистрация: 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

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

Поиск ближайшего числа в массиве
Есть число N и массив. Как определить номер элемента в массиве, значение...

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


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

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

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