Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как округлить число типа float? Так чтобы: 1.1 -> 1, а 1.7 -> 2. 
:(
    Опции темы
Allest
Дата 16.9.2003, 11:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ceil() - вверх к самому близкому целому числу 1.1 -> 2 и 1.7 -> 2
floor() - вниз к самому близкому целому числу 1.1 -> 1 и 1.7 -> 1

а мне надо, чтобы 1.1 -> 1 и 1.7 -> 2

подскажите
  Вверх
maxim1000
Дата 16.9.2003, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



не помню функции, но можно, например, так:
floor(x+0.5)


--------------------
qqq
PM WWW   Вверх
RAN
Дата 16.9.2003, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Есть RoundTo в VCL. А вообще, как maxim1000 предложил.
PM MAIL ICQ   Вверх
Фима
Дата 16.9.2003, 12:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можно вот так:

int Fix (double val)
{
char *temp = NULL;
char buff[100] = {0};
temp = _gcvt(val, 1, buff);
return atoi(temp);
}
  Вверх
Baa
Дата 16.9.2003, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Цитата
floor(x+0.5)

Только не 0.5, а 0.3


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
RAN
Дата 16.9.2003, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
Только не 0.5, а 0.3

Чего? Ты прикалываешься или нет?

Фима, радикально. Только тот результат, который ты хочешь получить, даст функция
inline int Fix(double val) { return int(val + 0.5); }

А твой пример, по-моему, не верен. Второй параметр - кол-во значащих символов. Если не выходит, то возвращает в формате E. Один символ - это реально только с числами от 0 до 10.

+ 0.5 даст ошибку только с отрицательными числами -0.5 -1.5 и т.п. Но на это можно закрыть глаза, так как и 0.5 + 0.5 иногда даёт 0.9999...
PM MAIL ICQ   Вверх
Baa
Дата 16.9.2003, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



floor(1.6+0.5) до скольки округлит? до 2, а надо? до 1...
или я не понял, чего изначально надо было?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
RAN
Дата 16.9.2003, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
floor(1.6+0.5) до скольки округлит? до 2, а надо? до 1...

Почему?

Цитата
Так чтобы: 1.1 -> 1, а 1.7 -> 2

Это он пример привёл. Это не границы.
PM MAIL ICQ   Вверх
Baa
Дата 16.9.2003, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Цитата
Почему?

1.6+0.5=2.1 ближайшее нижнее целое = 2.
Или ты про почему надо 1? мне подумалось, что 1.1->1, 1.7->2
он так обозначил границы округления...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Allest
Дата 16.9.2003, 16:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
1.1->1, 1.7->2

это я к примеру, не границы

всё понятно, всем большое спасибо.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1995 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.