blossom
Version:
Modern, Cross-Platform Application Framework
63 lines (51 loc) • 2.1 kB
JavaScript
// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// Portions ©2008-2010 Apple Inc. All rights reserved.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
sc_require('system/object');
var SC = global.SC; // Required to allow foundation to be re-namespaced as BT
// when loaded by the buildtools.
/**
@class
Implements some enhancements to the built-in Number object that makes it
easier to handle rounding and display of numbers.
@since SproutCore 1.0
@author Colin Campbell
*/
SC.Math = SC.Object.create({
/**
Checks to see if the number is near the supplied parameter to a certain lambda.
@param {Number} n1 First number in comparison.
@param {Number} n2 Number to compare against the first.
@param {Number} lambda The closeness sufficient for a positive result. Default 0.00001
@returns {Boolean}
*/
near: function(n1, n2, lambda) {
if (!lambda) lambda = 0.00001;
return Math.abs(n1 - n2) <= lambda;
},
/**
Rounds a number to a given decimal place. If a negative decimalPlace
parameter is provided, the number will be rounded outward (ie. providing
-3 will round to the thousands).
Function is insufficient for high negative values of decimalPlace parameter.
For example, (123456.789).round(-5) should evaluate to 100000 but instead
evaluates to 99999.999...
@param {Number} n The number to round
@param {Integer} decimalPlace
@returns {Number}
*/
round: function(n, decimalPlace) {
if (!decimalPlace) decimalPlace = 0;
var factor = Math.pow(10, decimalPlace);
if (decimalPlace < 0) {
// stop rounding errors from hurting the factor...
var s = factor.toString();
factor = s.substring(0, s.indexOf("1")+1);
}
n = n.valueOf();
return Math.round(n * factor) / factor;
}
}) ;