Browse Source

Fine tune numbers < 100 and >=1.

pull/102/head
Evan Theurer 11 years ago
parent
commit
fe13eec419
  1. 46
      static/js/filters/formatbase1000.js

46
static/js/filters/formatbase1000.js

@ -22,16 +22,18 @@ define([], function() { @@ -22,16 +22,18 @@ define([], function() {
// formatBase1000
/* Purpose: format number/unit appropriately.
Appends k+base-unit, base-unit, c+base-unit, m+base-unit to value depending input.
when Number >= 1 and !base-unit: no decimal is used
when Number < 1: 2 places decimal accuracy
Using: Number | formatBase1000[:'base-unit']
Appends k+base-unit, base-unit, c+base-unit, m+base-unit to value depending on input.
Decimal accuracy is taken care of automatically but override is avaible.
Using: Number | formatBase1000[:'base-unit'][:'desired-precision']
*/
return [function() {
var defaultPrecisionBaseAndOver = 0;
var defaultPrecisionUnderBase = 2;
return function(num, unit) {
var defaultPrecisionUnder1 = 2;
var defaultPrecisionFrom1AndUnder10 = 2;
var defaultPrecisionFrom10AndUnder100 = 1;
var defaultPrecisionFrom100AndOver = 0;
return function(num, unit, precision) {
num = Number(num);
precision = Number(precision);
var getNumber = function(precision) {
var dot = num.toString().search(/\./);
if (dot === -1) {
@ -39,26 +41,44 @@ define([], function() { @@ -39,26 +41,44 @@ define([], function() {
} else {
precision += dot;
}
// toPrecision supports range 1 - 21
if (precision > 21) {
precision = 21;
}
return num.toPrecision(precision);
};
var getPrecision = function() {
if (!isNaN(precision)) {
return precision;
}
if (num >= 100) {
return defaultPrecisionFrom100AndOver;
} else if (num < 100 && num >= 10) {
return defaultPrecisionFrom10AndUnder100;
} else if (num < 10 && num >= 1){
return defaultPrecisionFrom1AndUnder10;
} else {
return defaultPrecisionUnder1;
}
};
if (!unit) {
return getNumber(defaultPrecisionBaseAndOver);
return getNumber(getPrecision());
}
// killo
// kilo
if (num >= 1000) {
num /= 1000;
return getNumber(defaultPrecisionBaseAndOver) + 'k' + unit;
return getNumber(getPrecision()) + 'k' + unit;
// centi
} else if (num < 1 && num >= 0.01) {
num *= 100;
return getNumber(defaultPrecisionUnderBase) + 'c' + unit;
return getNumber(getPrecision()) + 'c' + unit;
// milli
} else if (num < 0.01) {
num *= 1000;
return getNumber(defaultPrecisionUnderBase) + 'm' + unit;
return getNumber(getPrecision()) + 'm' + unit;
// base
} else {
return getNumber(defaultPrecisionBaseAndOver) + unit;
return getNumber(getPrecision()) + unit;
}
};
}];

Loading…
Cancel
Save