diff options
author | Kim Alvefur <zash@zash.se> | 2020-06-04 16:56:28 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2020-06-04 16:56:28 +0200 |
commit | 8c7811ec43bd254b110319f983043e5fa16dcabf (patch) | |
tree | f674262d2c8ed4c296376061ae84352300e330ba /util/human | |
parent | 4a087da58efef206a0ad39abf510723b8c77e239 (diff) | |
download | prosody-8c7811ec43bd254b110319f983043e5fa16dcabf.tar.gz prosody-8c7811ec43bd254b110319f983043e5fa16dcabf.zip |
util.human.units: Factor out function for getting multiplier
Diffstat (limited to 'util/human')
-rw-r--r-- | util/human/units.lua | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/util/human/units.lua b/util/human/units.lua index 5a083783..af233e98 100644 --- a/util/human/units.lua +++ b/util/human/units.lua @@ -46,17 +46,10 @@ local binary = { "Yi", 2^80, } --- n: number, the number to format --- unit: string, the base unit --- b: optional enum 'b', thousands base -local function format(n, unit, b) --> string +local function adjusted_unit(n, b) local round = math_floor; local prefixes = large; local logbase = 1000; - local fmt = "%.3g %s%s"; - if n == 0 then - return fmt:format(n, "", unit); - end if b == 'b' then prefixes = binary; logbase = 1024; @@ -66,9 +59,22 @@ local function format(n, unit, b) --> string end local m = math_max(0, math_min(8, round(math_abs(math_log(math_abs(n), logbase))))); local prefix, multiplier = unpack(prefixes, m * 2-1, m*2); - return fmt:format(n / (multiplier or 1), prefix or "", unit); + return multiplier or 1, prefix; +end + +-- n: number, the number to format +-- unit: string, the base unit +-- b: optional enum 'b', thousands base +local function format(n, unit, b) --> string + local fmt = "%.3g %s%s"; + if n == 0 then + return fmt:format(n, "", unit); + end + local multiplier, prefix = adjusted_unit(n, b); + return fmt:format(n / multiplier, prefix or "", unit); end return { + adjust = adjusted_unit; format = format; }; |