914
edits
m (Fix parameter naming) |
(Force removal of scientific notation on formatnum) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 16: | Line 16: | ||
d = 1e30 | d = 1e30 | ||
} | } | ||
local function sigfig(x, y) | |||
local x_sign = x < 0 and -1 or 1 | |||
local x = math.abs(x) | |||
local n = math.floor(math.log10(x)) + 1 - y | |||
return x_sign * math.pow(10, n) * p.round2(x / math.pow(10, n), 0) | |||
end | |||
-- Automatically rounds to 2 places from the significant figure. | |||
-- Taken from RSWiki. | |||
function p.autoround(x) | |||
x = tonumber(x) or 0 | |||
local _x | |||
if x == 0 then | |||
_x = 0 | |||
elseif math.abs(x) < 0.1 then | |||
_x = sigfig(x, 2) | |||
elseif math.abs(x) > 999 then | |||
_x = p.round2(x, 0) | |||
else | |||
_x = p.round2(x, 2) | |||
end | |||
return _x | |||
end | |||
--- Formats a number by inserting commas as thousand separators. | --- Formats a number by inserting commas as thousand separators. | ||
-- @param number (number or string) The number to format. | -- @param number (number or string) The number to format. | ||
Line 23: | Line 47: | ||
if tonumber(number) == nil then | if tonumber(number) == nil then | ||
return number | return number | ||
end | |||
while true do | -- Find out of the number is using scientific notation. | ||
-- If it is, convert it to a string and remove the trailing zeroes. | |||
local result = tostring(number) | |||
if result:find("[eE]") ~= nil then | |||
result = string.format("%.20f", number) | |||
result = result:gsub("%.?0*$", "") | |||
end | |||
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 | ||
end | end | ||
return result | |||
end | end | ||
edits