Вопрос вот в чём, что я делаю не так во здесь. У меня есть глобальная переменная, которая меняется от событий с объектами и на сценах - hot. hotmax - тоже глобальная переменная, но проблема не в ней. Изначальное значение hot задается перед игрой и оно не равно нулю. Допустим, = 20. hotmax тоже 20. Их значение отображается постоянно в инвентаре при помощи объекта Статуса тепла.
obj {
nam = 'тепло';
pri = -100;
disp = function ()
p ('тепло ', hot,'/', hotmax);
end;
}
У меня много что на hot воздействует, но при вычитании десятичных дробей из hot (например hot = hot - 0.2) всё идет и отображается хорошо, но между нулём и единицей, а особенно когда вычитание ведёт к hot к чистому нулю - hot начинает отображаться в инвентаре некорректно. Измучившись в поисках своей ошибки, я создал объект который КОНТРОЛИРУЕМО и прозрачно вычитает из hot дробные значения. И положил его на сцену.
obj {
nam = 'вычесть';
dsc = '{^> Вычесть.}';
act = function ()
hot = hot - 0.2;
end;
}
Он имитирует падение тепла персонажа по нажатию. Вычитание и отображение hot в инвентаре происходит корректно пока не достигает единицы. Т.е. (19.8 ... 19.6 ... 19.4 ... ... 1.2 ...). Далее, при вычитании из единицы отображается уже число в каком-то некрасивом длинном виде и неточно. пишу в порядке убывания:1.2 - норм. вычитаю еще 0.2
1 - норм. вычитаю еще 0.2
0.80000000000004- уже не норм. вычитаю еще 0.2
0.60000000000004- уже не норм. вычитаю еще 0.2
0.40000000000004- уже не норм. вычитаю еще 0.2
0.20000000000004- уже не норм. вычитаю еще 0.2
3.7581049383562e-014 - не норм.
Это касается случаев не только с десятыми, но и с сотыми (то есть при вычитании 0.02). В чём моя ошибка, что я сделал не так? Я хочу, чтобы, когда вес предметов (при их отсутствии) был равен нулю, то и объект статуса выводил ноль.