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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Округление числа 
V
    Опции темы
88andrey
Дата 28.5.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.4.2007

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



Цитата

int a =  (int) (x > 0 ? x + 0.5 : x - 0.5); 


а если число до точки будет больше int'a то это не пройдет
PM MAIL   Вверх
Samotnik
Дата 28.5.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Не ну я все понимаю, но не могу понять вот этого , обьясните плз кто шарит  

Цитата(88andrey @  28.5.2007,  08:52 Найти цитируемый пост)
int a =  (int) (x > 0 ? x + 0.5 : x - 0.5); 

Значит как я понимаю:
(int) - это преобразование  ,  затем
если  x>0  то   x + 0.5   иначе   x - 0.5
Ну это все при том что    х   double.     и че?   smile 
       расскажите плз  как ето работает!!

PM MAIL   Вверх
zkv
Дата 29.5.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



Цитата(Samotnik @  28.5.2007,  23:30 Найти цитируемый пост)
, но не могу понять вот этого , обьясните плз 


Цитата(Samotnik @  28.5.2007,  23:30 Найти цитируемый пост)
int a =  (int) (x > 0 ? x + 0.5 : x - 0.5); 

сначала вычисляется выражение в скобках: x > 0 ? x + 0.5 : x - 0.5. Эта конструкция (тернарный оператор) дает x + 0.5, если x > 0, и x - 0.5 во всех остальных случаях.
Далее результат преобразовывается к int. Все.

Цитата(88andrey @  28.5.2007,  08:52 Найти цитируемый пост)
а если число до точки будет больше int'a то это не пройдет 

поясните, пожалуйста.
PM MAIL   Вверх
JackYF
Дата 29.5.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



zkv, возможно, имеется ввиду округление числа типа 1234.56 * 10^58 до 10^59?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zkv
Дата 29.5.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



Цитата(JackYF @  29.5.2007,  16:46 Найти цитируемый пост)
возможно, имеется ввиду округление числа типа 1234.56 * 10^58 до 10^59

1234.56 * 10^58 == 1.23456 * 10^61,  округляем, получаем 10^59?  smile  smile 
я, вроде, понял, что ты имел ввиду. Я просто объяснил, что было записано в строке int a =  (int) (x > 0 ? x + 0.5 : x - 0.5);
А сказать наверняка, что имеется ввиду может только автор топика smile
PM MAIL   Вверх
JackYF
Дата 29.5.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(zkv @  29.5.2007,  17:01 Найти цитируемый пост)
что имеется ввиду может только автор топика smile 

угу. Будем ждать.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sgrey
Дата 29.5.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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 функцию не видел в с++....
PM MAIL   Вверх
JackYF
Дата 29.5.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sgrey @  29.5.2007,  18:53 Найти цитируемый пост)
только я round функцию не видел в с++.... 


Где-то давно я ее видел... Но мне могло показаться. Или она не-ANSI была.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Romikgy
Дата 30.5.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(88andrey @  28.5.2007,  07:52 Найти цитируемый пост)
а если число до точки будет больше int'a то это не пройдет 

юзать тогда int64  smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sgrey
Дата 31.5.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



Цитата(JackYF @ 29.5.2007,  19:57)
Цитата(sgrey @  29.5.2007,  18:53 Найти цитируемый пост)
только я round функцию не видел в с++.... 


Где-то давно я ее видел... Но мне могло показаться. Или она не-ANSI была.

ну я не отрицаю что её нет... надо порытся в справочниках будет по функциям... 
PM MAIL   Вверх
Любитель
Дата 2.6.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(JackYF @  29.5.2007,  19:57 Найти цитируемый пост)
Или она не-ANSI была.

Угу. Многие производители компилеров добавляют в стандартную библиотеку. Но сие не есть стандарт.


--------------------
PM MAIL ICQ Skype   Вверх
Samotnik
Дата 5.6.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Цитата(zkv @  29.5.2007,  17:01 Найти цитируемый пост)
А сказать наверняка, что имеется ввиду может только автор топика

Да без проблем  smile :
Нуна 2,368787945646987897564654798     округлить до 2
и ф-ция, кот вы мне порекомендовали не работает(к сожалению).

Пэ.Эс.
Да и ланно, закрываю тему, уж по-другому давно сделал!!!!!!!    Всем спасибо!!!!!!     smile 
PM MAIL   Вверх
zkv
Дата 5.6.2007, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



Цитата(Samotnik @  5.6.2007,  00:43 Найти цитируемый пост)
Нуна 2,368787945646987897564654798     округлить до 2

и вы утверждаете, что в результате работы такой программы, у вас не 2 выводится?  smile 
Код

#include <iostream>

int MyRound( double x )
{
    return  (int) (x > 0 ? x + 0.5 : x - 0.5);
}

int main()
{
    std::cout<<MyRound( 2.368787945646987897564654798 );
    std::cin.get();
}

Цитата(Samotnik @  5.6.2007,  00:43 Найти цитируемый пост)
кот вы мне порекомендовали не работает(к сожалению).

порекомендовал вообще то не я, но рекомендацию поддерживаю  smile 
PM MAIL   Вверх
Samotnik
Дата 5.6.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Цитата(zkv @  5.6.2007,  03:55 Найти цитируемый пост)
и вы утверждаете, что в результате работы такой программы, у вас не 2 выводится?

Не совсем так, просто я писал на  MFC курсач и там были большие вычисления (от начала до конца строки  smile ) Вот. И в итоге мне нуна было округлить double число до целого(т.к. нуно рассчитать количество машин) и эта формула не подходила.
Просто я попроще вопрос решил задать, т.к. думал, что есть какая-нить стандартная ф-ция для округления, но ее не оказалось.  smile    
А  простые вычисления(типа таких как вы написали) округляются без проблем  smile  
PM MAIL   Вверх
Дмитрий Т
Дата 11.7.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(JackYF @ 29.5.2007,  20:57)
Цитата(sgrey @  29.5.2007,  18:53 Найти цитируемый пост)
только я round функцию не видел в с++.... 


Где-то давно я ее видел... Но мне могло показаться. Или она не-ANSI была.

round появилась в языке Си в стандарте C99, а в С++ как известно входит только C89 так что этой функции в C++ пока нет.
PM MAIL WWW ICQ Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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