2,875
edits
(Add general numbers function for handling numerical values) |
m (Add functions for numeric parsing with suffixes (k, m, b, etc)) |
||
Line 5: | Line 5: | ||
local p = {} | local p = {} | ||
local numberSuffixes = { | |||
k = 1e3, | k = 1e3, | ||
m = 1e6, | m = 1e6, | ||
Line 26: | Line 16: | ||
d = 1e30 | d = 1e30 | ||
} | } | ||
--- Parses a string representation of a number with suffixes | |||
-- @param str (string) The string to parse. | |||
-- @return (number) The numeric value represented by the input string or 0 if the string is NaN. | |||
function p.parseNumber(str) | |||
-- Empty/nil string. | |||
if not str or str == "" then | |||
return 0 | |||
end | |||
-- | -- If the input is already a number, return it. | ||
if | local number = tonumber(str) | ||
return | if number then | ||
return number | |||
end | end | ||
local numStr = str:sub(1, -2) | |||
local suffix = str:sub(-1):lower() | local suffix = str:sub(-1):lower() | ||
local multiplier = | |||
if tonumber(numStr) then | |||
local multiplier = numberSuffixes[suffix] or 1 | |||
return numStr * multiplier | |||
else | |||
return 0 | |||
end | |||
end | |||
--- Format a number with optional suffixes based on its magnitude. | |||
-- @param number (number) The number to be formatted. | |||
-- @param decimals (number) [optional] The number of decimals to include in the formatted output. Default is 2. | |||
-- @return (string) The formatted number as a string | |||
function p.abbreviateNumber(number, decimals) | |||
if type(number) ~= "number" then | |||
error("NaN") | |||
end | |||
-- Round to two decimals by default. | |||
decimals = decimals or 2 | |||
for suffix, value in pairs(numberSuffixes) do | |||
if number >= value then | |||
if number % 1 ~= 0 then | |||
return string.format("%." .. decimals .. "f%s", number / value, suffix) | |||
else | |||
return string.format("%.0f%s", number / value, suffix) | |||
end | |||
end | |||
end | end | ||
return number | return tostring(number) | ||
end | end | ||
return p |
edits