Anonymous

Module:Number: Difference between revisions

From Melvor Idle
Force removal of scientific notation on formatnum
(Add magical autoround function)
(Force removal of scientific notation on formatnum)
(2 intermediate revisions by the same user not shown)
Line 17: Line 17:
     }
     }


local function sigfig(x, p)
local function sigfig(x, y)
local x_sign = x < 0 and -1 or 1
local x_sign = x < 0 and -1 or 1
local x = math.abs(x)
local x = math.abs(x)
local n = math.floor(math.log10(x)) + 1 - p
local n = math.floor(math.log10(x)) + 1 - y
return x_sign * math.pow(10, n) * p.round2(x / math.pow(10, n), 0)
return x_sign * math.pow(10, n) * p.round2(x / math.pow(10, n), 0)
end
end
Line 40: Line 40:
return _x
return _x
end   
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 46: Line 47:
if tonumber(number) == nil then
if tonumber(number) == nil then
return number
return number
else
end
local result = number
while true do
-- Find out of the number is using scientific notation.
-- Format in blocks of 3 digits at a time until formatting is complete
-- If it is, convert it to a string and remove the trailing zeroes.
            local k
local result = tostring(number)
result, k = string.gsub(result, "^(-?%d+)(%d%d%d)", '%1,%2')
if result:find("[eE]") ~= nil then
if k == 0 then
result = string.format("%.20f", number)
break
result = result:gsub("%.?0*$", "")
end
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
return result
end
end
return result
end     
end     


915

edits