Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема с делением/преобразованием типов

7.0K
09 мая 2008 года
Rusd
88 / / 26.08.2006
 
Код:
RECT rctClient;
POINT ptCurNew;
float buf;

GetCursorPos(&ptCurNew)
GetClientRect(hWnd,&rctClient);
buf = (ptCurNew.x - rctClient.left)/(rctClient.right-rctClient.left);

По непонятным мне причинам buf равен 0, хотя при
 
Код:
buf = (ptCurNew.x - rctClient.left);

 
Код:
buf = (rctClient.right-rctClient.left);

buf много больше 0
Может кто знает в чем нюанс?
7.0K
09 мая 2008 года
Rusd
88 / / 26.08.2006
обнаружил, что
 
Код:
buf = (ptCurNew.x - rctClient.left);
buf = buf / (rctClient.right-rctClient.left);

дает верный результат. Похоже, что (ptCurNew.x - rctClient.left)/(rctClient.right-rctClient.left) сводится к целочисленному типу, с отбрасыванием дробной части.
9.4K
09 мая 2008 года
AIGrifon
165 / / 13.11.2007
Цитата: Rusd
обнаружил, что
 
Код:
buf = (ptCurNew.x - rctClient.left);
buf = buf / (rctClient.right-rctClient.left);

дает верный результат. Похоже, что (ptCurNew.x - rctClient.left)/(rctClient.right-rctClient.left) сводится к целочисленному типу, с отбрасыванием дробной части.



Верно. Важно следить за такими мелочами, которые потом могут причинить много проблем.

Для получения верного результата используй приведение, например:

 
Код:
buf = float(ptCurNew.x - rctClient.left) / (rctClient.right-rctClient.left)
7.0K
09 мая 2008 года
Rusd
88 / / 26.08.2006
Цитата: AIGrifon


 
Код:
buf = float(ptCurNew.x - rctClient.left) / (rctClient.right-rctClient.left)



Кстати, как вариант. Как то в голову сразу не пришло :) Спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог