С багфиксом и комментами
Код
[FUNCTION f_math_2cathegory]
local.lng = <eval strlen(<args>)>
while <local.lng> > 3
local.lng -= 3
local.res = ".<strsub <local.lng> 3 <args>><local.res>" //отрезаем по 3 знака с конца args и клеим в начало res вместе с '.'
endwhile
local.leftover = "<strsub 0 <local.lng> <args>>"//то что осталось спереди, может включать в себя '-'
if (!strcmp(0, <local.res>))
//если число состоит из 3 знаков
local.res = "<local.leftover>"
elseif (!strcmp(-, <local.leftover>) && (strlen(<local.leftover>) == 1))
//если нашли только '-', отрезаем точку спереди и 0 в конце строки res
local.res = "<local.leftover><strsub 1 <eval strlen(<local.res>)-2> <local.res>>"
else
//если спереди осталось больше 1 знака, отрезаем только 0 в конце строки res
local.res = "<local.leftover><strsub 0 <eval strlen(<local.res>)-1> <local.res>>"
endif
return <local.res>
Цитата(Sirocco @ 13.3.2019, 15:20)

if strlen(<argn>) <= 3
return <argn>
endif
Если будет -350 то не поможет это и прийдется писать ту костыльную if логику в цикле как у тебя.