Browse Source

Fine tune numbers < 100 and >=1.

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

46
static/js/filters/formatbase1000.js

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

Loading…
Cancel
Save