**FractPart сейчас станет 0.36:
FractPart = 45.36 - INT(45.36)
**xPart = 0.36 * 100 = 36
xPart=FractPart*100
**yPart = 36, но ни хрена! yPart = 35!!! **xPart=xPart+0.0000000000001 =36
**xPart=xPart+0.00000000000001 = 35
yPart=INT(xPart)
Message("","xPart")
Message("","yPart")
В данном случае, что то косит функция INT(, или видимо xPart вовсе не 36, ошибки округления связанные с максисальным представлением числа,
(к примеру 35.9999999999999999999999999)
на разных машинах могут быть разные, в зависимости от разрядности регистров.
FractPart имеет тип с плавающей запятой, а 36 только его визуальное представление, действительное его значение на
какой то децил меньше, вот INT его и хавает.
Вот если преобразовать xPart в строку и обратно, обрежутся все невидимые знаки, получим истинное целое число (integer).
Переменные в билдере имеют тип почти variant, так что пока ей не задали тип явно, действителен предидущий.
Переменной с плавающей запятой можно присвоить целое число, но от этого она не поменяет свой тип,
Если переменной билдера integer присвоить значение с плавающей запятой она поменяет свой тип.
Quote
Выходит, ошибка происходит в строке FractPart = 45.36 - INT(45.36)! Как бороться?
В строке yPart=INT(xPart).