915
edits
m (Add functions from Module:Shared) |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 17: | Line 17: | ||
} | } | ||
--- Formats a number by inserting commas as thousand separators. | |||
-- @param number (number or string) The number to format. | |||
-- @return (string) The formatted number with commas as thousand separators | |||
function p.formatnum(number) | |||
if tonumber(number) == nil then | |||
return number | |||
else | |||
local result = number | |||
while true do | |||
-- Format in blocks of 3 digits at a time until formatting is complete | |||
local k | |||
result, k = string.gsub(result, "^(-?%d+)(%d%d%d)", '%1,%2') | |||
if k == 0 then | |||
break | |||
end | |||
end | |||
return result | |||
end | |||
end | |||
--- Rounds a number to a specified number of digits after the decimal point. | |||
-- @param val (number or string) The value to round. | |||
-- @param maxDigits (number) [optional] The maximum number of digits after the decimal point. | |||
-- @param minDigits (number) [optional] The minimum number of digits after the decimal point. | |||
-- @return (string) The rounded number with the specified number of digits after the decimal point, or the input unchanged if it's not a number. | |||
function p.round(val, maxDigits, minDigits) | |||
if val == nil then | |||
return nil | |||
else | |||
if type(maxDigits) == "table" then | |||
minDigits = maxDigits[2] | |||
maxDigits = maxDigits[1] | |||
end | |||
local result = val.."" | |||
local decimals = string.find(result, "%.") | |||
if decimals ~= nil then | |||
decimals = string.len(result) - decimals | |||
else | |||
decimals = 0 | |||
end | |||
if maxDigits ~= nil and decimals > maxDigits then | |||
result = string.format("%."..maxDigits.."f", result) | |||
elseif minDigits ~= nil and decimals < minDigits then | |||
result = string.format("%."..minDigits.."f", result) | |||
end | |||
return result | |||
end | |||
end | |||
--- Rounds a number to a specified number of decimal places. | |||
-- @param num (number) The number to round. | |||
-- @param numDecimalPlaces (number) [optional] The number of decimal places to round to. | |||
-- @return (number) The rounded number with the specified number of decimal places, or the nearest integer if numDecimalPlaces is not provided. | |||
--From http://lua-users.org/wiki/SimpleRound | |||
function p.round2(num, numDecimalPlaces) | |||
local mult = 10^(numDecimalPlaces or 0) | |||
return math.floor(num * mult + 0.5) / mult | |||
end | |||
-- Euclidean Greatest Common Divisor algorithm | |||
function p.gcd(a, b) | |||
if b ~= 0 then | |||
return p.gcd(b, a % b) | |||
else | |||
return math.abs(a) | |||
end | |||
end | |||
--Formats a pair of numbers as a reduced fraction | |||
function p.fraction(n, d) | |||
local gcd = p.gcd(n, d) | |||
return p.formatnum(n/gcd)..'/'..p.formatnum(d/gcd) | |||
end | |||
--Similar to p.fraction but returns the simplified numerator and denomerator separately without formatting | |||
function p.fractionpair(n, d) | |||
local gcd = p.gcd(n, d) | |||
return n / gcd, d / gcd | |||
end | |||
--Returns a number including the sign, even if positive | |||
function p.numStrWithSign(number) | |||
if number >= 0 then | |||
return '+'..p.formatnum(number) | |||
else | |||
return p.formatnum(number) | |||
end | |||
end | |||
--- Clamps a value between a minimum and maximum range. | |||
-- @param value (number) The value to be clamped. | |||
-- @param min (number) The minimum value in the range. | |||
-- @param max (number) The maximum value in the range. | |||
-- @return (number) The clamped value within the specified range. | |||
function p.clamp(value, min, max) | |||
return math.min(math.max(value, min), max) | |||
end | |||
--- Parses a string representation of a number with suffixes | --- Parses a string representation of a number with suffixes | ||
-- @param str (string) The string to parse. | -- @param str (string) The string to parse. | ||
Line 67: | Line 168: | ||
end | end | ||
-- Converts a string to a | --- Converts a string to a number or returns a default value if conversion fails. | ||
-- string | -- @param str (string) The string to convert to a number. | ||
-- @param def (number) The default value to return if conversion fails or the input is nil. | |||
-- @return (number) The numeric value represented by the input string or the default value if conversion fails. | |||
function p.toNumberOrDefault(str, def) | function p.toNumberOrDefault(str, def) | ||
local num = tonumber(str) | local num = tonumber(str) | ||
Line 78: | Line 181: | ||
end | end | ||
-- | --- Converts a string to a number or throws an error with a specified message if conversion fails. | ||
-- | -- @param str (string) The string to convert to a number. | ||
-- @param errorMsg (string) [optional] The error message to throw if conversion fails. Defaults to "NaN". | |||
-- @return (number) The numeric value represented by the input string. | |||
-- @throws Error with specified error message if conversion fails. | |||
function p.toNumberOrError(str, errorMsg) | function p.toNumberOrError(str, errorMsg) | ||
local num = tonumber(str) | local num = tonumber(str) |
edits