Module:Utils/number: Difference between revisions

From Space Station 14 Wiki
Aliser (talk | contribs)
No edit summary
Aliser (talk | contribs)
simplify format_probability
Line 35: Line 35:
         percentage_display = percentage .. "%"
         percentage_display = percentage .. "%"
     else
     else
        local percentage_rounded_str = p.round_to_digit(percentage, digits)
    return p.round_to_digit_formatted(percentage, digits) .. "%"
 
        local was_percentage_rounded = tostring(percentage) ~= percentage_rounded_str
 
        percentage_display = (was_percentage_rounded and "≈" or "") .. percentage_rounded_str .. "%"
     end
     end



Revision as of 13:40, 27 May 2025

Module documentation
View or edit this documentation (about module documentation)

Contains number-related module utilities.


local p = {}

-- Rounds number `num` to `digits` numbers after comma.
-- @returns {number}
function p.round_to_digit(num, digits)
	local str_res = string.format("%." .. digits .. "f", num)
    	:gsub("%.?0+$", "") -- strip trailing zeros (including the dot if theres all zeros after)
    	
    return tonumber(str_res)
end

-- Rounds number `num` to `digits` numbers after comma,
-- adding "≈" if rounding occured.
-- @returns {string}
function p.round_to_digit_formatted(num, digits)
	local rounded = p.round_to_digit(num, digits)
	if num == rounded then
		return tostring(rounded)
	else
		return "≈" .. rounded
	end
end

-- Formats a probability number, ranging from 0 to 1, 
-- to a percentage with specified number of digits after comma.
-- If rounding occurs, also adds "≈".
-- @param prob Probability, from 0 to 1.
-- @param digits Digits after comma. Any more get rounded
-- @returns {string}
function p.format_probability(prob, digits)
    local percentage = prob * 100

    local percentage_display
    if digits == nil then
        percentage_display = percentage .. "%"
    else
    	return p.round_to_digit_formatted(percentage, digits) .. "%"
    end

    return percentage_display
end

return p