![]() |
|
![]() ![]() ![]() |
|
cadet05 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.1.2011 Репутация: нет Всего: нет |
Здравствуйте! Помогите пожалуйста решить проблему.
double t=0; for (int i=0;i<100;i++) { t=t+0.1; qDebug() << t <<" "<< floor(t); } Вывожу таким образом на консоль одновременно значение числа и его округленное значение. Получаю следующее: (часть вывода) .............................................. 16.5 16 16.6 16 16.7 16 16.8 16 16.9 16 17 16 17.1 17 17.2 17 17.3 17 17.4 17 17.5 17 17.6 17 17.7 17 17.8 17 17.9 17 18 17 18.1 18 18.2 18 18.3 18 18.4 18 18.5 18 18.6 18 18.7 18 18.8 18 18.9 18 19 19 19.1 19 19.2 19 19.3 19 19.4 19 19.5 19 19.6 19 19.7 19 19.8 19 19.9 19 20 20 20.1 20 ............................................. Почему-то почти всегда округленным значением числа без дробной части является число, меньшее его на единицу. В данной части выведенных строк это касается чисел 17 и 18. Отчего это происходит я знаю, этого объяснять не надо. Подскажите подалуйста, как этого избежать!!! |
|||
|
||||
cadet05 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.1.2011 Репутация: нет Всего: нет |
Изложу суть проблемы проще:
Нужно узнать, является ли число типа double целым: Методы сравнения дробной части с нулём типа if (t - floor(t) == 0){ значит целое. } или if (t - int(t) == 0) { значит целое. } не работают. Также не работают методы: if (abs( d - (int)(d + 0.5) ) < 0.0001) { значит целое. } и if (d ==(int)d) { значит целое. } Как узнать!!??!!??!!?? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
не очень понятен выбор форума С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets ...
в число с плавающей точкой может вообще не получиться хранить целое десятичное число. например: double d = 50; не факт, что (int)d == d почитай про представление плавающего числа P.S. вот самый правильный способ, только fabs вместо abs и +0.5 не нужно:
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |