Software /
code /
prosody
Changeset
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 |
parents | 10902:5d113332855c |
children | 10904:d009a79f723a |
files | util/human/units.lua |
diffstat | 1 files changed, 15 insertions(+), 9 deletions(-) [+] |
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; };