Строковое представление числа с разделением на триады

Опубликовано в QLua

Как вывести число 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

А если нужно разделить число на триады в препроцессоре (а мне понадобилось, эстет, понимаете ли innocent), то макрос может выглядеть так:

define(`m4_format_number', `ifelse(eval(len(`$1')<=3),1,`$1',`regexp(`$1',`\([0-9]*\)\([0-9][0-9][0-9] ?.*\)',`$0(\1) \2')')')

Рекурсивный макрос, который в процессе своего выполнения дописывает сам себя столько раз, сколько пробелов необходимо добавить в строку исходя из переданного ему числа.

 

 

Недостаточно прав для комментирования

Архив QLua