Jump to content

Module:Math: Difference between revisions

990 bytes added ,  11 years ago
Add precision calculation
m>Banaticus
(created random module)
 
m>Dragons flight
(Add precision calculation)
Line 1: Line 1:
local mathy = {}
local z = {}


function mathy.random( frame )
function z.random( frame )
     first = tonumber(frame.args[1]) -- if it doesn't exist it's NaN, if not a number it's nil
     first = tonumber(frame.args[1]) -- if it doesn't exist it's NaN, if not a number it's nil
     second = tonumber(frame.args[2])
     second = tonumber(frame.args[2])
Line 13: Line 13:
     return math.random()
     return math.random()
end
end
function z.precision( frame )
    return z._precision( frame.args[1] or frame.args.x or '0' )
end
-- Determines precision of a number using the string representation
function z._precision( x )
    x = string.upper( x )
   
    local decimal = string.find( x, '.', 1, true )
    local exponent = string.find( x, 'E', 1, true )
    local result = 0;
   
    if exponent ~= nil then
        exponent = string.sub( x, exponent + 1 )
        x = string.sub( x, 0, exponent )
        result = result - tonumber( exponent )
    end   
   
    if decimal ~= nil then
        result = result + string.len( x ) - decimal
        return result
    end
       
    local pos = string.len( x );
    while x:byte(pos) == string.byte('0') do
        pos = pos - 1
        result = result - 1
        if pos <= 0 then
            return 0
        end
                       
        if x:byte(pos) == string.byte('.') then
            pos = pos - 1
        end
    end
   
    return result
end
return z
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.