local function escape_pattern(s) return (s:gsub("(%W)", "%%%1")) end function Thousands(n, sep) sep = sep or "." local s = tostring(n) local sign, int, frac = s:match("^([%-]?)(%d+)(%.?%d*)$") int = int:reverse():gsub("(%d%d%d)", "%1" .. sep):reverse() local sep_esc = escape_pattern(sep) int = int:gsub("^" .. sep_esc, "") return sign .. int .. frac end