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
Может кто знает в чем нюанс?
Код:
buf = (ptCurNew.x - rctClient.left);
buf = buf / (rctClient.right-rctClient.left);
buf = buf / (rctClient.right-rctClient.left);
дает верный результат. Похоже, что (ptCurNew.x - rctClient.left)/(rctClient.right-rctClient.left) сводится к целочисленному типу, с отбрасыванием дробной части.
Цитата: Rusd
обнаружил, что
дает верный результат. Похоже, что (ptCurNew.x - rctClient.left)/(rctClient.right-rctClient.left) сводится к целочисленному типу, с отбрасыванием дробной части.
Код:
buf = (ptCurNew.x - rctClient.left);
buf = buf / (rctClient.right-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)
Цитата: AIGrifon
Код:
buf = float(ptCurNew.x - rctClient.left) / (rctClient.right-rctClient.left)
Кстати, как вариант. Как то в голову сразу не пришло :) Спасибо.