![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
admsasha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
мне просто надо разделить два числа
x=400/379 какой тип данных нужен для X ? long,float перебрал.. неправильно считает... т.е. округляет |
|||
|
||||
admsasha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
Уточняю что мне надо,
есть два числа, их нужно поделить, и вывести результат, потом округлить это число, и снова вывести результат. float a; float b; int c; int d; c=a/b - правильно считает prinft("%? ",c) % что писать нужно ?, "%f" ? d=c - так правильно будет ??, какая функция для округления числа, и помешения ее в int ? при компиляции ругается: proba.c:18: warning: assignment to `long int' from `float' всё, как бы работает, но ругается. |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
int - целое
float - плавующее ![]() |
|||
|
||||
Ni@m |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 11.3.2004 Где: почти Киев Репутация: 0 Всего: 6 |
Можешь ему явно указывать c=(int)(a/b);
Либо с = dynamic_cast<int>(a/b); Помоему такой функции нету, можно округлить функ. ceil или floor, но они возвращают float, но можно перевести явным преобразованием типов(смотри выше) --------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше. |
|||
|
||||
NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
|
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Дело не x, а в том что компилятор трактует 400 как int. В результате имеем 1
![]()
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Goryachev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.2.2005 Где: Израиль Репутация: нет Всего: нет |
Функция для округления числа:
|
|||
|
||||
pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
В мире С, есть такие функции как ceil, floor, обитают в math.h
Первая округляет число в меньшую сторону, вторая в большую. Принимает аргументы как число в плавающей точкой. Не надо кастить из float в int, или наоборот. Это черевато ошибками. -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
![]() |
|||
|
||||
Goryachev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.2.2005 Где: Израиль Репутация: нет Всего: нет |
В данном случае, никаких ошибок быть неможет. Кастинг в int из float срезает все, что после floating point. А как ты думаешь преобразованна функция floor? Это сообщение отредактировал(а) Goryachev - 21.3.2005, 19:52 |
|||
|
||||
pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
Я думаю вот что:
Если число равно 2.98 и его преобразовать в целый тип, то оно сранет 2, если юзать функции округления то они дадут разультат 3. Не надо изобретать колесо, если уже давно это сделано за вас. Добавлено @ 14:06 Но если после округления, разве что для еффективности. Но согластно Страуструпу это очен нехорошо !!! -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Вообще-то функция floor() возвращет результат, который не больше переданного аргумента. Так для
будет возвращенно -2 если же просто отбросить числа после запятой, то получиться -1 |
||||
|
|||||
Goryachev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.2.2005 Где: Израиль Репутация: нет Всего: нет |
DENNN
Ты прав, но все равно реализованно через кастинг int. |
|||
|
||||
jorkug |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 21.3.2005 Репутация: нет Всего: 1 |
А не прoще ли так:
"%.0" - округляет значение до ближайшего целого числа. |
|||
|
||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Для ответа на этот вопрос нужно сначала прибегнуть к понятиям алгебры(в частном случае, арифметики), а уж затем искать соотв. представление в языках программирования. Т.к. арифметические операции в языках программирования реализованы на основе этих самих правил. Результат деления целых чисел - есть в общем случае рациональное число, т.е. число с конечной десятичной дробью или бесконечной периодической дробью. В частном случае, результат деления целых чисел - целое число. Отсюда, требуемый тип данных для результата - это тип представляющий вещественные числа, каковых имеется: 1) float - 4 байтный тип, точность представления вещественного числа - 7 десятичных знаков 2) double - 8-байтный тип, точностью представления - 15 десятичных знаков. Отсюда вопрос: что и где у вас float округляет?
Вопрос: до какого знака после запятой требуется округлить число? Не следует путать внутреннее представление вещественного числа типами float и double с числом знаков выведенных на печать ф-цией типа printf(), к-рай между прочим делает округление по алгебраическим правилам. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |