[#] Вот. сделал отдельный код для запуска, прошу проверить непосредственно в игровом режиме
Wol4ik(syscall,22) — All
2017-10-08 07:46:31


Нажимать придется подольше, идти с 20 по кусочкам в 0.2, и я бы сделал не с 20, а с 2-х, чтобы облегчить тест программы, но обнаружил, что если изначальное число не 20, а например 2 или 3, то характер некрасивого отображения числа в инвентаре меняется. Даю полный текст файла main3.lua
-- $Name:Программа теста дробей$
-- $Version: 0.1$
-- $Author: Wol4ik$

require "fmt";

global {
             hotmax = 20;
             hot = 20;
       }
--
obj {
	nam = 'вычесть';
	dsc = '{Вычесть.}';
	act = function ()
			hot = hot - 0.2;
		  end;
     }
--
obj {
	nam = 'тепло';
	pri = -100;
	disp = function (s)
				p ('тепло ', hot,'/', hotmax);
		   end;
	}
--
room {
		nam = 'main';
		onenter = function (s)
					pl.obj:add 'тепло'; -- помещение в инвентарь статуса тепла.
				  end;
		decor = [[Для уменьшения тепла на 0,2 нажать на "вычесть".]];
		obj = {'вычесть'};
      }
-- конец кода.

[#] Округление чисел в Lua
Peter(syscall,1) — Wol4ik
2017-10-08 08:24:33


Это "фича" Lua. Если нужно отображать с заданной точностью числа, придется их округлять при вычислении, или при выводе.
Примеры функций округления тут:
http://lua-users.org/wiki/SimpleRound

Я взял одну из них и немного поменял код.
function round(num, numDecimalPlaces)
  return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end
obj {
    nam = 'вычесть';
    dsc = '{Вычесть.}';
    act = function ()
        hot = round(hot - 0.2, 2) -- округляем!
    end;
     }