Search code examples
regexlualua-patterns

Format long number to shorter version in Lua


I'm trying to figure out how I would go about formatting a large number to the shorter version by appending 'k' or 'm' using Lua. Example:

17478    => 17.5k
2832     => 2.8k
1548034  => 1.55m

I would like to have the rounding in there as well as per the example. I'm not very good at Regex, so I'm not sure where I would begin. Any help would be appreciated. Thanks.


Solution

  • Pattern matching doesn't seem like the right direction for this problem.

    Assuming 2 digits after decimal point are kept in the shorter version, try:

    function foo(n)
        if n >= 10^6 then
            return string.format("%.2fm", n / 10^6)
        elseif n >= 10^3 then
            return string.format("%.2fk", n / 10^3)
        else
            return tostring(n)
        end
    end
    

    Test:

    print(foo(17478))
    print(foo(2832))
    print(foo(1548034))
    

    Output:

    17.48k
    2.83k
    1.55m