Formatting Numbers |
|
---============================================================ -- rounds a number to the nearest decimal places -- function round(val, decimal) if (decimal) then return math.floor( (val * 10^decimal) + 0.5) / (10^decimal) else return math.floor(val+0.5) end end
--=================================================================== -- given a numeric value formats output with comma to separate thousands -- and rounded to given decimal places -- -- function format_num(amount, decimal, prefix, neg_prefix) local str_amount, formatted, famount, remain
decimal = decimal or 2 -- default 2 decimal places neg_prefix = neg_prefix or "-" -- default negative sign
famount = math.abs(round(amount,decimal)) famount = math.floor(famount)
remain = round(math.abs(amount) - famount, decimal)
return formatted end }}}
Example usage:
amount = 1333444.1 print(format_num(amount,2)) print(format_num(amount,-2,"US$")) amount = -22333444.5634 print(format_num(amount,2,"$")) print(format_num(amount,2,"$","()")) print(format_num(amount,3,"$","NEG "))
Output:
1,333,444.10 US$1,333,400 -$22,333,444.56 ($22,333,444.56) NEG $22,333,444.563
RichardWarburton alternate version:
function comma_value(n) -- credit http://richard.warburton.it local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$') return left..(num:reverse():gsub('(%d%d%d)','%1,'):reverse())..right end
Example usage:
print(comma_value(9)) print(comma_value(999)) print(comma_value(1000)) print(comma_value('1333444.10')) print(comma_value('US$1333400')) print(comma_value('-$22333444.56')) print(comma_value('($22333444.56)')) print(comma_value('NEG $22333444.563'))
Output:
9 999 1,000 1,333,444.10 US$1,333,400 -$22,333,444.56 ($22,333,444.56) NEG $22,333,444.563