Строковое представление числа с разделением на триады
Как вывести число 1234567890 в виде 1 234 567 890?
function string.format_number(number,separator) local mask,n = "%1" .. (separator or " ") .. "%2" while n ~= 0 do number, n = string.gsub(number, "^%s*([-+]?%d+)(%d%d%d)", mask) end return number end
Использование:
print(string.format_number(1234567890))
Update 16.06.2022
А если нужно разделить число на триады в препроцессоре (а мне понадобилось, эстет, понимаете ли
), то макрос может выглядеть так:
define(`m4_format_number', `ifelse(eval(len(`$1')<=3),1,`$1',`regexp(`$1',`\([0-9]*\)\([0-9][0-9][0-9] ?.*\)',`$0(\1) \2')')')
Рекурсивный макрос, который в процессе своего выполнения дописывает сам себя столько раз, сколько пробелов необходимо добавить в строку исходя из переданного ему числа.
