From d2f605de23f950d0c5aef07f540bf686b1ebf4ee Mon Sep 17 00:00:00 2001 From: josdejong Date: Sat, 16 Mar 2013 12:54:05 +0100 Subject: [PATCH] Fixed determining correct prefix for negative units --- src/type/Unit.js | 7 +++---- test/type/unit.js | 11 ++++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/type/Unit.js b/src/type/Unit.js index 0b02c9f89..47d8d8e62 100644 --- a/src/type/Unit.js +++ b/src/type/Unit.js @@ -372,10 +372,10 @@ Unit.prototype.toString = function() { // the absolute value of the log10 is closest to zero, // though with a little offset of 1.2 for nicer values: you get a // sequence 1mm 100mm 500mm 0.6m 1m 10m 100m 500m 0.6km 1km ... + var absValue = Math.abs(this.value / this.unit.value); var bestPrefix = Unit.PREFIX_NONE; var bestDiff = Math.abs( - Math.log(this.value / this.unit.value / bestPrefix.value) / - Math.LN10 - 1.2); + Math.log(absValue / bestPrefix.value) / Math.LN10 - 1.2); var prefixes = this.unit.prefixes; for (var p in prefixes) { @@ -383,8 +383,7 @@ Unit.prototype.toString = function() { var prefix = prefixes[p]; if (prefix.scientific) { var diff = Math.abs( - Math.log(this.value / this.unit.value / prefix.value) / - Math.LN10 - 1.2); + Math.log(absValue / prefix.value) / Math.LN10 - 1.2); if (diff < bestDiff) { bestPrefix = prefix; diff --git a/test/type/unit.js b/test/type/unit.js index d70bca5f0..2ad99e981 100644 --- a/test/type/unit.js +++ b/test/type/unit.js @@ -7,7 +7,16 @@ var math = require('../../math.js'), var unit1 = new Unit(5000, 'cm'); -assert.equal(unit1, '50 m'); +assert.equal(unit1.toString(), '50 m'); +assert.equal(new Unit(5, 'kg').toString(), '5 kg'); +assert.equal(new Unit('5kg').toString(), '5 kg'); +assert.equal(new Unit('5 kg').toString(), '5 kg'); +assert.equal(new Unit(' 5 kg ').toString(), '5 kg'); +assert.equal(new Unit('5e-3kg').toString(), '5 g'); +assert.equal(new Unit('5e+3kg').toString(), '5 Mg'); +assert.equal(new Unit('-5kg').toString(), '-5 kg'); +assert.equal(new Unit('-5mg').toString(), '-5 mg'); +assert.equal(new Unit(null, 'kg').toString(), '1 kg'); assert.throws(function () { Unit(2, 'inch');