aboutsummaryrefslogtreecommitdiffstats
path: root/util/human
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-06-04 16:56:28 +0200
committerKim Alvefur <zash@zash.se>2020-06-04 16:56:28 +0200
commit8c7811ec43bd254b110319f983043e5fa16dcabf (patch)
treef674262d2c8ed4c296376061ae84352300e330ba /util/human
parent4a087da58efef206a0ad39abf510723b8c77e239 (diff)
downloadprosody-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.lua24
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;
};