From 599e085c1c07d51ecf9409c59f8f61dbbd93a593 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Wed, 25 Dec 2019 15:50:05 -0600 Subject: [PATCH] Add small number word mode - only goes up to septillion --- gorge.js | 5 +++++ numbers.js | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/gorge.js b/gorge.js index bda74ff..157adf4 100644 --- a/gorge.js +++ b/gorge.js @@ -29,6 +29,11 @@ const numberModes = { words: { name: "Words", render: numberText, + next: "smallWords" + }, + smallWords: { + name: "Small Words", + render: numberTextSmall, next: "scientific" }, scientific: { diff --git a/numbers.js b/numbers.js index cfa10af..fa20f75 100644 --- a/numbers.js +++ b/numbers.js @@ -2,6 +2,26 @@ function render(val, places = 1, smallPlaces = 0) { return numberMode.render(val, places, smallPlaces); } +function numberTextSmall(val, places = 1, smallPlaces = 0) { + if (isNaN(val)) { + throw new RangeError("Invalid number: " + val); + } + if (val < 1000) { + return round(val, smallPlaces); + } + + let power = Math.floor(Math.log10(val)); + + let order = Math.floor(power / 3); + + adjusted = round(val / Math.pow(1000, order), places).toFixed(places); + + if (order <= 8) + return adjusted + " " + _numberWords[order - 1]; + else + return numberTextSmall(val / Math.pow(10, 24), places, smallPlaces) + " septillion" +} + function numberText(val, places = 1, smallPlaces = 0) { if (isNaN(val)) { throw new RangeError("Invalid number: " + val);