Browse Source

Numbers can now have their number of decimal points set explicitly.

This lets the volume meters not jitter around, but also lets things that should be fixed precision
tags/v1.1.0
Fen Dweller 5 years ago
parent
commit
898c68cc2d
2 changed files with 24 additions and 15 deletions
  1. +3
    -3
      game.js
  2. +21
    -12
      units.js

+ 3
- 3
game.js View File

@@ -4349,9 +4349,9 @@ function cooldown_end(category) {
}); });
} }


function transformNumbers(line)
function transformNumbers(line, fixed=undefined)
{ {
return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers); });
return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers, fixed); });
} }


function update(lines = [], active=true) function update(lines = [], active=true)
@@ -4410,7 +4410,7 @@ function applyPercentage(name, meterPos) {
} }


function stylePercentage(name, storage) { function stylePercentage(name, storage) {
document.getElementById(name).innerHTML = name + ": " + transformNumbers(volume(storage.amount,unit,false));
document.getElementById(name).innerHTML = name + ": " + transformNumbers(volume(storage.amount,unit,false), 2);
let meterPos = 150 - storage.amount / storage.limit * 150; let meterPos = 150 - storage.amount / storage.limit * 150;
applyPercentage(name, meterPos); applyPercentage(name, meterPos);
} }


+ 21
- 12
units.js View File

@@ -40,24 +40,33 @@ function numberRough(value,suffix="") {
} }
} }
} }
function number(value, type="full", precision=3) {

function fixedIfDecimal(num, fixed) {
if (fixed === undefined)
return num.toString();
else;
return num.toFixed(fixed);
}

function number(value, type="full", fixed) {
console.log(value)
var val = parseFloat(value); var val = parseFloat(value);
switch(type) { switch(type) {
case "full": case "full":
if (Math.log(value) / Math.log(10) < 10) { if (Math.log(value) / Math.log(10) < 10) {
return val.toFixed(2);
return fixedIfDecimal(val, fixed);
} }


case "scientific": return val.toExponential(precision).toString();
case "words": return number_words_repeated(val);
case "prefix": return number_prefix(val);
case "scientific": return val.toExponential(3, fixed).toString();
case "words": return number_words_repeated(val, fixed);
case "prefix": return number_prefix(val, fixed);
} }
} }


function number_words(value) { function number_words(value) {
var scale = Math.floor(Math.log(value) / Math.log(1000)); var scale = Math.floor(Math.log(value) / Math.log(1000));
if (scale < 0) { if (scale < 0) {
return value.toString();
return fixedIfDecimal(value, fixed);
} }
switch(scale) { switch(scale) {
case 0: return value.toString(); case 0: return value.toString();
@@ -85,14 +94,14 @@ function number_words(value) {
} }
} }


function number_words_repeated(value) {
function number_words_repeated(value, fixed) {
if (value == Infinity) if (value == Infinity)
return "a lot of"; return "a lot of";
var scale = Math.floor(Math.log(value) / Math.log(1000)); var scale = Math.floor(Math.log(value) / Math.log(1000));
if (scale < 0) if (scale < 0)
return value.toFixed(2);
return fixedIfDecimal(value, fixed);
switch(scale) { switch(scale) {
case 0: return value.toFixed(2);
case 0: return fixedIfDecimal(value, fixed);
case 1: return Math.round(value / 1e3).toString() + " thousand"; case 1: return Math.round(value / 1e3).toString() + " thousand";
case 2: return Math.round(value / 1e6).toString() + " million"; case 2: return Math.round(value / 1e6).toString() + " million";
case 3: return Math.round(value / 1e9).toString() + " billion"; case 3: return Math.round(value / 1e9).toString() + " billion";
@@ -108,12 +117,12 @@ function number_words_repeated(value) {
} }
} }


function number_prefix(value) {
function number_prefix(value, fixed) {
var scale = Math.floor(Math.log(value) / Math.log(1000)); var scale = Math.floor(Math.log(value) / Math.log(1000));
if (scale < 0) if (scale < 0)
return value.toFixed(2);
return fixedIfDecimal(value, fixed);
switch(scale) { switch(scale) {
case 0: return value.toFixed(2);
case 0: return fixedIfDecimal(value, fixed);
case 1: return Math.round(value / 1e3).toString() + "K"; case 1: return Math.round(value / 1e3).toString() + "K";
case 2: return Math.round(value / 1e6).toString() + "M"; case 2: return Math.round(value / 1e6).toString() + "M";
case 3: return Math.round(value / 1e9).toString() + "G"; case 3: return Math.round(value / 1e9).toString() + "G";


Loading…
Cancel
Save