Module:Radix: Difference between revisions

From Nguhcraft Wiki
Jump to navigation Jump to search
Astaryuu (talk | contribs)
No edit summary
Astaryuu (talk | contribs)
No edit summary
Line 41: Line 41:
    ret = ret .. string.sub(characters, digit, digit)
    ret = ret .. string.sub(characters, digit, digit)
    maxpower = maxpower / newradix
    maxpower = maxpower / newradix
    -- append a . if maxpower went below 1
    if maxpower < 1 then ret = ret .. "." end
    end
    end
    return ret
    return ret

Revision as of 10:01, 4 July 2026

Documentation for this module may be created at Module:Radix/doc

local r = {}

r.decimal_to = function(frame)
	-- Get arguments from call
	local decimal = math.abs(tonumber(frame.args[1]))
	local sign = decimal > 0 and "" or "-"
	-- If decimal is 1, return itself
	if decimal == 1 then
		return tostring(decimal)
	end
	-- Newradix is the radix to convert to
	local newradix = tonumber(frame.args[2])
	local characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	-- precision is the number of digits below 1 to use
	-- if decimal is less than 1/newradix ^ precision, return 0
	local precision = tonumber(frame.args[3]) or 0
	local minpower = newradix ^ (precision * -1)
	if decimal < minpower then
		return "0"
	end
	-- final string to yeet everything into
	local ret = "" .. sign
	
	local maxpower = 1
	if decimal > 0 then
	    -- Get highest power of newradix less than decimal
	    while maxpower < decimal do
	    	maxpower = maxpower * newradix
	    end
	    maxpower = maxpower / newradix
	    -- Double loop
	    -- Outer loop: While maxpower >= minpower, add result of second loop to ret
	    -- Inner loop: While decimal >= maxpower, subtract maxpower from decimal
	    while maxpower >= minpower do
	    	local digit = 1
	    	while decimal >= maxpower do
	    		decimal = decimal - maxpower
	    		digit = digit + 1
	    	end
	    	-- digit now contains number of maxpowers, concat it onto ret
	    	ret = ret .. string.sub(characters, digit, digit)
	    	maxpower = maxpower / newradix
	    	-- append a . if maxpower went below 1 
	    	if maxpower < 1 then ret = ret .. "." end
	    end
	    return ret
	else
		-- Decimal is 0, also return itself
		return tostring(decimal)
	end
end

return r