[#] результваты
Wol4ik(syscall,22) — All
2017-10-09 19:19:20


function round(num, numDecimalPlaces)
	local mult = 10^(numDecimalPlaces or 0)
	return math.floor(num * mult + 0.5) / mult
end
--
obj {
	nam = 'тепло';
	pri = -100;
	disp = function (s)
			p ('тепло ', string.format("%.3f", hot),'/', hotmax);
		   end;
     }
Вышеуказанное при вычитании из 24 чисел по 0.6 - при чистом нуле hot выводит -0.000
Далее, всё то же самое только заменена сторочка:
p ('тепло ', string.format("%.3f", round(hot,2)),'/', hotmax);
При достижении чистого нуля выводится всё корректно, т.е. 0.000

[#] Re: результваты
Peter(syscall,1) — Wol4ik
2017-10-09 19:26:13


Понял. Я подумаю, как это сделать удобным, а пока используй string.format. можно обернуть ее в функцию для удобства.

[#] Re: результваты
Wol4ik(syscall,22) — Peter
2017-10-09 19:41:19


Если бы я был как-бы пользователем очередной новой функции или версии Stead 3.x.x, чисто гипотетически. Мне было бы проще задавать так. Если я хочу, чтобы данная переменная выводилась с нужной постоянной детализацией знаков после запятой, то при первичном присвоении значения сразу их и прописать. Например.
global {
         биткоины = 0.000; -- при любых вычислениях вывод p будет всегда с 3-мя знаками после запятой.
         выстота = 0.00; -- при любых вычислениях вывод p будет всегда с 2-мя знаками после запятой.
         тепло = 0; -- вывод будет иметь столько знаков после запятой,сколько нужно,
                    --- но без лишних нулей: 1.2 ... 1.000000002 ... 1 ... 6 .... 0 ....
        }
Это, разумеется не в плане советов, а на правах вольной фантазии.

[#] Re: результваты
Peter(syscall,1) — Wol4ik
2017-10-10 05:44:51


> Если бы я был как-бы пользователем очередной новой функции или версии Stead 3.x.x, чисто гипотетически,
Согласен, но мы не все можем сделать, так как язык -- стандартный Lua. Я думал о том, чтобы вносить изменения в него и таскать измененную версию с инстедом, но пока решил так не делать.

Я вспомнил, в инстеде есть pf. Для начала, замени p(string.format( на:

pf("%.02f", переменная).

Хоть какое то упрощение. :)

[#] Re: результваты
Wol4ik(syscall,22) — Peter
2017-10-10 07:04:56


pf станно себя ведет. Вот старый вид, он выводит смесь строковых заготовок и переменных.
p ('тепло ', string.format("%.3f", round(hot,2)),'/', hotmax);
Выводится следующее ..... тепло 19.600/24
При pf же с кодом
p ('тепло ', pf("%.3f", round(hot,2)),'/', hotmax);
"тепло и hot меняются местами, а то, что после hot, вообще не выводится. Выглядит вывод теперь так:
19.4000тепло

[#] Re: результваты
Peter(syscall,1) — Wol4ik
2017-10-10 07:20:26


Вот так надо:
pf ('тепло %.3f / %d',hot, hotmax);

Надо бы мне в документации написать.

[#] Re: результваты
Wol4ik(syscall,22) — Peter
2017-10-10 07:30:46


Ага, теперь красиво. Только я пробелы убрал около слэша. То есть есть некие служебные меры
1. %d
2. %.3f
3. еще что-то...
Более мене пончл как их настраивать 3f 2f и тд.