Software /
code /
prosody
Diff
util/human/units.lua @ 10903:c5f26f9adb31
util.human.units: Factor out function for getting multiplier
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 04 Jun 2020 16:56:28 +0200 |
parent | 10890:a451f80d1cea |
child | 12573:0f4feaf9ca64 |
line wrap: on
line diff
--- a/util/human/units.lua Thu Jun 04 16:54:52 2020 +0200 +++ b/util/human/units.lua Thu Jun 04 16:56:28 2020 +0200 @@ -46,17 +46,10 @@ "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 @@ 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; };