initial source commit
This commit is contained in:
@@ -0,0 +1,528 @@
|
||||
///#source 1 1 /ClientSource/Scripts/Modules/jQuery-NumberFormatter/jshashtable-2.1.js
|
||||
/**
|
||||
* Copyright 2010 Tim Down.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
var Hashtable=(function(){var p="function";var n=(typeof Array.prototype.splice==p)?function(s,r){s.splice(r,1)}:function(u,t){var s,v,r;if(t===u.length-1){u.length=t}else{s=u.slice(t+1);u.length=t;for(v=0,r=s.length;v<r;++v){u[t+v]=s[v]}}};function a(t){var r;if(typeof t=="string"){return t}else{if(typeof t.hashCode==p){r=t.hashCode();return(typeof r=="string")?r:a(r)}else{if(typeof t.toString==p){return t.toString()}else{try{return String(t)}catch(s){return Object.prototype.toString.call(t)}}}}}function g(r,s){return r.equals(s)}function e(r,s){return(typeof s.equals==p)?s.equals(r):(r===s)}function c(r){return function(s){if(s===null){throw new Error("null is not a valid "+r)}else{if(typeof s=="undefined"){throw new Error(r+" must not be undefined")}}}}var q=c("key"),l=c("value");function d(u,s,t,r){this[0]=u;this.entries=[];this.addEntry(s,t);if(r!==null){this.getEqualityFunction=function(){return r}}}var h=0,j=1,f=2;function o(r){return function(t){var s=this.entries.length,v,u=this.getEqualityFunction(t);while(s--){v=this.entries[s];if(u(t,v[0])){switch(r){case h:return true;case j:return v;case f:return[s,v[1]]}}}return false}}function k(r){return function(u){var v=u.length;for(var t=0,s=this.entries.length;t<s;++t){u[v+t]=this.entries[t][r]}}}d.prototype={getEqualityFunction:function(r){return(typeof r.equals==p)?g:e},getEntryForKey:o(j),getEntryAndIndexForKey:o(f),removeEntryForKey:function(s){var r=this.getEntryAndIndexForKey(s);if(r){n(this.entries,r[0]);return r[1]}return null},addEntry:function(r,s){this.entries[this.entries.length]=[r,s]},keys:k(0),values:k(1),getEntries:function(s){var u=s.length;for(var t=0,r=this.entries.length;t<r;++t){s[u+t]=this.entries[t].slice(0)}},containsKey:o(h),containsValue:function(s){var r=this.entries.length;while(r--){if(s===this.entries[r][1]){return true}}return false}};function m(s,t){var r=s.length,u;while(r--){u=s[r];if(t===u[0]){return r}}return null}function i(r,s){var t=r[s];return(t&&(t instanceof d))?t:null}function b(t,r){var w=this;var v=[];var u={};var x=(typeof t==p)?t:a;var s=(typeof r==p)?r:null;this.put=function(B,C){q(B);l(C);var D=x(B),E,A,z=null;E=i(u,D);if(E){A=E.getEntryForKey(B);if(A){z=A[1];A[1]=C}else{E.addEntry(B,C)}}else{E=new d(D,B,C,s);v[v.length]=E;u[D]=E}return z};this.get=function(A){q(A);var B=x(A);var C=i(u,B);if(C){var z=C.getEntryForKey(A);if(z){return z[1]}}return null};this.containsKey=function(A){q(A);var z=x(A);var B=i(u,z);return B?B.containsKey(A):false};this.containsValue=function(A){l(A);var z=v.length;while(z--){if(v[z].containsValue(A)){return true}}return false};this.clear=function(){v.length=0;u={}};this.isEmpty=function(){return !v.length};var y=function(z){return function(){var A=[],B=v.length;while(B--){v[B][z](A)}return A}};this.keys=y("keys");this.values=y("values");this.entries=y("getEntries");this.remove=function(B){q(B);var C=x(B),z,A=null;var D=i(u,C);if(D){A=D.removeEntryForKey(B);if(A!==null){if(!D.entries.length){z=m(v,C);n(v,z);delete u[C]}}}return A};this.size=function(){var A=0,z=v.length;while(z--){A+=v[z].entries.length}return A};this.each=function(C){var z=w.entries(),A=z.length,B;while(A--){B=z[A];C(B[0],B[1])}};this.putAll=function(H,C){var B=H.entries();var E,F,D,z,A=B.length;var G=(typeof C==p);while(A--){E=B[A];F=E[0];D=E[1];if(G&&(z=w.get(F))){D=C(F,z,D)}w.put(F,D)}};this.clone=function(){var z=new b(t,r);z.putAll(w);return z}}return b})();
|
||||
///#source 1 1 /ClientSource/Scripts/Modules/jQuery-NumberFormatter/jquery.numberformatter.js
|
||||
/**
|
||||
* jquery.numberformatter - Formatting/Parsing Numbers in jQuery
|
||||
*
|
||||
* Written by
|
||||
* Michael Abernethy (mike@abernethysoft.com),
|
||||
* Andrew Parry (aparry0@gmail.com)
|
||||
*
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||
* and GPL (GPL-LICENSE.txt) licenses.
|
||||
*
|
||||
* @author Michael Abernethy, Andrew Parry
|
||||
* @version 1.2.3-SNAPSHOT ($Id$)
|
||||
*
|
||||
* Dependencies
|
||||
*
|
||||
* jQuery (http://jquery.com)
|
||||
* jshashtable (http://www.timdown.co.uk/jshashtable)
|
||||
*
|
||||
* Notes & Thanks
|
||||
*
|
||||
* many thanks to advweb.nanasi.jp for his bug fixes
|
||||
* jsHashtable is now used also, so thanks to the author for that excellent little class.
|
||||
*
|
||||
* This plugin can be used to format numbers as text and parse text as Numbers
|
||||
* Because we live in an international world, we cannot assume that everyone
|
||||
* uses "," to divide thousands, and "." as a decimal point.
|
||||
*
|
||||
* As of 1.2 the way this plugin works has changed slightly, parsing text to a number
|
||||
* has 1 set of functions, formatting a number to text has it's own. Before things
|
||||
* were a little confusing, so I wanted to separate the 2 out more.
|
||||
*
|
||||
*
|
||||
* jQuery extension functions:
|
||||
*
|
||||
* formatNumber(options, writeBack, giveReturnValue) - Reads the value from the subject, parses to
|
||||
* a Javascript Number object, then formats back to text using the passed options and write back to
|
||||
* the subject.
|
||||
*
|
||||
* parseNumber(options) - Parses the value in the subject to a Number object using the passed options
|
||||
* to decipher the actual number from the text, then writes the value as text back to the subject.
|
||||
*
|
||||
*
|
||||
* Generic functions:
|
||||
*
|
||||
* formatNumber(numberString, options) - Takes a plain number as a string (e.g. '1002.0123') and returns
|
||||
* a string of the given format options.
|
||||
*
|
||||
* parseNumber(numberString, options) - Takes a number as text that is formatted the same as the given
|
||||
* options then and returns it as a plain Number object.
|
||||
*
|
||||
* To achieve the old way of combining parsing and formatting to keep say a input field always formatted
|
||||
* to a given format after it has lost focus you'd simply use a combination of the functions.
|
||||
*
|
||||
* e.g.
|
||||
* $("#salary").blur(function(){
|
||||
* $(this).parseNumber({format:"#,###.00", locale:"us"});
|
||||
* $(this).formatNumber({format:"#,###.00", locale:"us"});
|
||||
* });
|
||||
*
|
||||
* The syntax for the formatting is:
|
||||
* 0 = Digit
|
||||
* # = Digit, zero shows as absent
|
||||
* . = Decimal separator
|
||||
* - = Negative sign
|
||||
* , = Grouping Separator
|
||||
* % = Percent (multiplies the number by 100)
|
||||
*
|
||||
* For example, a format of "#,###.00" and text of 4500.20 will
|
||||
* display as "4.500,20" with a locale of "de", and "4,500.20" with a locale of "us"
|
||||
*
|
||||
*
|
||||
* As of now, the only acceptable locales are
|
||||
* Arab Emirates -> "ae"
|
||||
* Australia -> "au"
|
||||
* Austria -> "at"
|
||||
* Brazil -> "br"
|
||||
* Canada -> "ca"
|
||||
* China -> "cn"
|
||||
* Czech -> "cz"
|
||||
* Denmark -> "dk"
|
||||
* Egypt -> "eg"
|
||||
* Finland -> "fi"
|
||||
* France -> "fr"
|
||||
* Germany -> "de"
|
||||
* Greece -> "gr"
|
||||
* Great Britain -> "gb"
|
||||
* Hong Kong -> "hk"
|
||||
* India -> "in"
|
||||
* Israel -> "il"
|
||||
* Japan -> "jp"
|
||||
* Russia -> "ru"
|
||||
* South Korea -> "kr"
|
||||
* Spain -> "es"
|
||||
* Sweden -> "se"
|
||||
* Switzerland -> "ch"
|
||||
* Taiwan -> "tw"
|
||||
* Thailand -> "th"
|
||||
* United States -> "us"
|
||||
* Vietnam -> "vn"
|
||||
**/
|
||||
|
||||
(function(jQuery) {
|
||||
|
||||
var nfLocales = new Hashtable();
|
||||
|
||||
var nfLocalesLikeUS = [ 'ae','au','ca','cn','eg','gb','hk','il','in','jp','sk','th','tw','us' ];
|
||||
var nfLocalesLikeDE = [ 'at','br','de','dk','es','gr','it','nl','pt','tr','vn' ];
|
||||
var nfLocalesLikeFR = [ 'cz','fi','fr','ru','se','pl' ];
|
||||
var nfLocalesLikeCH = [ 'ch' ];
|
||||
|
||||
var nfLocaleFormatting = [ [".", ","], [",", "."], [",", " "], [".", "'"] ];
|
||||
var nfAllLocales = [ nfLocalesLikeUS, nfLocalesLikeDE, nfLocalesLikeFR, nfLocalesLikeCH ]
|
||||
|
||||
function FormatData(dec, group, neg) {
|
||||
this.dec = dec;
|
||||
this.group = group;
|
||||
this.neg = neg;
|
||||
};
|
||||
|
||||
function init() {
|
||||
// write the arrays into the hashtable
|
||||
for (var localeGroupIdx = 0; localeGroupIdx < nfAllLocales.length; localeGroupIdx++) {
|
||||
localeGroup = nfAllLocales[localeGroupIdx];
|
||||
for (var i = 0; i < localeGroup.length; i++) {
|
||||
nfLocales.put(localeGroup[i], localeGroupIdx);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function formatCodes(locale, isFullLocale) {
|
||||
if (nfLocales.size() == 0)
|
||||
init();
|
||||
|
||||
// default values
|
||||
var dec = ".";
|
||||
var group = ",";
|
||||
var neg = "-";
|
||||
|
||||
if (isFullLocale == false) {
|
||||
// Extract and convert to lower-case any language code from a real 'locale' formatted string, if not use as-is
|
||||
// (To prevent locale format like : "fr_FR", "en_US", "de_DE", "fr_FR", "en-US", "de-DE")
|
||||
if (locale.indexOf('_') != -1)
|
||||
locale = locale.split('_')[1].toLowerCase();
|
||||
else if (locale.indexOf('-') != -1)
|
||||
locale = locale.split('-')[1].toLowerCase();
|
||||
}
|
||||
|
||||
// hashtable lookup to match locale with codes
|
||||
var codesIndex = nfLocales.get(locale);
|
||||
if (codesIndex) {
|
||||
var codes = nfLocaleFormatting[codesIndex];
|
||||
if (codes) {
|
||||
dec = codes[0];
|
||||
group = codes[1];
|
||||
}
|
||||
}
|
||||
return new FormatData(dec, group, neg);
|
||||
};
|
||||
|
||||
|
||||
/* Formatting Methods */
|
||||
|
||||
|
||||
/**
|
||||
* Formats anything containing a number in standard js number notation.
|
||||
*
|
||||
* @param {Object} options The formatting options to use
|
||||
* @param {Boolean} writeBack (true) If the output value should be written back to the subject
|
||||
* @param {Boolean} giveReturnValue (true) If the function should return the output string
|
||||
*/
|
||||
jQuery.fn.formatNumber = function(options, writeBack, giveReturnValue) {
|
||||
|
||||
return this.each(function() {
|
||||
// enforce defaults
|
||||
if (writeBack == null)
|
||||
writeBack = true;
|
||||
if (giveReturnValue == null)
|
||||
giveReturnValue = true;
|
||||
|
||||
// get text
|
||||
var text;
|
||||
if (jQuery(this).is(":input"))
|
||||
text = new String(jQuery(this).val());
|
||||
else
|
||||
text = new String(jQuery(this).text());
|
||||
|
||||
// format
|
||||
var returnString = jQuery.formatNumber(text, options);
|
||||
|
||||
// set formatted string back, only if a success
|
||||
// if (returnString) {
|
||||
if (writeBack) {
|
||||
if (jQuery(this).is(":input"))
|
||||
jQuery(this).val(returnString);
|
||||
else
|
||||
jQuery(this).text(returnString);
|
||||
}
|
||||
if (giveReturnValue)
|
||||
return returnString;
|
||||
// }
|
||||
// return '';
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* First parses a string and reformats it with the given options.
|
||||
*
|
||||
* @param {Object} numberString
|
||||
* @param {Object} options
|
||||
*/
|
||||
jQuery.formatNumber = function(numberString, options){
|
||||
var options = jQuery.extend({}, jQuery.fn.formatNumber.defaults, options);
|
||||
var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
|
||||
|
||||
var dec = formatData.dec;
|
||||
var group = formatData.group;
|
||||
var neg = formatData.neg;
|
||||
|
||||
var validFormat = "0#-,.";
|
||||
|
||||
// strip all the invalid characters at the beginning and the end
|
||||
// of the format, and we'll stick them back on at the end
|
||||
// make a special case for the negative sign "-" though, so
|
||||
// we can have formats like -$23.32
|
||||
var prefix = "";
|
||||
var negativeInFront = false;
|
||||
for (var i = 0; i < options.format.length; i++) {
|
||||
if (validFormat.indexOf(options.format.charAt(i)) == -1)
|
||||
prefix = prefix + options.format.charAt(i);
|
||||
else
|
||||
if (i == 0 && options.format.charAt(i) == '-') {
|
||||
negativeInFront = true;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
var suffix = "";
|
||||
for (var i = options.format.length - 1; i >= 0; i--) {
|
||||
if (validFormat.indexOf(options.format.charAt(i)) == -1)
|
||||
suffix = options.format.charAt(i) + suffix;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
options.format = options.format.substring(prefix.length);
|
||||
options.format = options.format.substring(0, options.format.length - suffix.length);
|
||||
|
||||
// now we need to convert it into a number
|
||||
//while (numberString.indexOf(group) > -1)
|
||||
// numberString = numberString.replace(group, '');
|
||||
//var number = new Number(numberString.replace(dec, ".").replace(neg, "-"));
|
||||
var number = new Number(numberString);
|
||||
|
||||
return jQuery._formatNumber(number, options, suffix, prefix, negativeInFront);
|
||||
};
|
||||
|
||||
/**
|
||||
* Formats a Number object into a string, using the given formatting options
|
||||
*
|
||||
* @param {Object} numberString
|
||||
* @param {Object} options
|
||||
*/
|
||||
jQuery._formatNumber = function(number, options, suffix, prefix, negativeInFront) {
|
||||
var options = jQuery.extend({}, jQuery.fn.formatNumber.defaults, options);
|
||||
var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
|
||||
|
||||
var dec = formatData.dec;
|
||||
var group = formatData.group;
|
||||
var neg = formatData.neg;
|
||||
|
||||
var forcedToZero = false;
|
||||
if (isNaN(number)) {
|
||||
if (options.nanForceZero == true) {
|
||||
number = 0;
|
||||
forcedToZero = true;
|
||||
} else
|
||||
return null;
|
||||
}
|
||||
|
||||
// special case for percentages
|
||||
if (suffix == "%")
|
||||
number = number * 100;
|
||||
|
||||
var returnString = "";
|
||||
if (options.format.indexOf(".") > -1) {
|
||||
var decimalPortion = dec;
|
||||
var decimalFormat = options.format.substring(options.format.lastIndexOf(".") + 1);
|
||||
|
||||
// round or truncate number as needed
|
||||
if (options.round == true)
|
||||
number = new Number(number.toFixed(decimalFormat.length));
|
||||
else {
|
||||
var numStr = number.toString();
|
||||
numStr = numStr.substring(0, numStr.lastIndexOf('.') + decimalFormat.length + 1);
|
||||
number = new Number(numStr);
|
||||
}
|
||||
|
||||
var decimalValue = number % 1;
|
||||
var decimalString = new String(decimalValue.toFixed(decimalFormat.length));
|
||||
decimalString = decimalString.substring(decimalString.lastIndexOf(".") + 1);
|
||||
|
||||
for (var i = 0; i < decimalFormat.length; i++) {
|
||||
if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) != '0') {
|
||||
decimalPortion += decimalString.charAt(i);
|
||||
continue;
|
||||
} else if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) == '0') {
|
||||
var notParsed = decimalString.substring(i);
|
||||
if (notParsed.match('[1-9]')) {
|
||||
decimalPortion += decimalString.charAt(i);
|
||||
continue;
|
||||
} else
|
||||
break;
|
||||
} else if (decimalFormat.charAt(i) == "0")
|
||||
decimalPortion += decimalString.charAt(i);
|
||||
}
|
||||
returnString += decimalPortion
|
||||
} else
|
||||
number = Math.round(number);
|
||||
|
||||
var ones = Math.floor(number);
|
||||
if (number < 0)
|
||||
ones = Math.ceil(number);
|
||||
|
||||
var onesFormat = "";
|
||||
if (options.format.indexOf(".") == -1)
|
||||
onesFormat = options.format;
|
||||
else
|
||||
onesFormat = options.format.substring(0, options.format.indexOf("."));
|
||||
|
||||
var onePortion = "";
|
||||
if (!(ones == 0 && onesFormat.substr(onesFormat.length - 1) == '#') || forcedToZero) {
|
||||
// find how many digits are in the group
|
||||
var oneText = new String(Math.abs(ones));
|
||||
var groupLength = 9999;
|
||||
if (onesFormat.lastIndexOf(",") != -1)
|
||||
groupLength = onesFormat.length - onesFormat.lastIndexOf(",") - 1;
|
||||
var groupCount = 0;
|
||||
for (var i = oneText.length - 1; i > -1; i--) {
|
||||
onePortion = oneText.charAt(i) + onePortion;
|
||||
groupCount++;
|
||||
if (groupCount == groupLength && i != 0) {
|
||||
onePortion = group + onePortion;
|
||||
groupCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// account for any pre-data padding
|
||||
if (onesFormat.length > onePortion.length) {
|
||||
var padStart = onesFormat.indexOf('0');
|
||||
if (padStart != -1) {
|
||||
var padLen = onesFormat.length - padStart;
|
||||
|
||||
// pad to left with 0's or group char
|
||||
var pos = onesFormat.length - onePortion.length - 1;
|
||||
while (onePortion.length < padLen) {
|
||||
var padChar = onesFormat.charAt(pos);
|
||||
// replace with real group char if needed
|
||||
if (padChar == ',')
|
||||
padChar = group;
|
||||
onePortion = padChar + onePortion;
|
||||
pos--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!onePortion && onesFormat.indexOf('0', onesFormat.length - 1) !== -1)
|
||||
onePortion = '0';
|
||||
|
||||
returnString = onePortion + returnString;
|
||||
|
||||
// handle special case where negative is in front of the invalid characters
|
||||
if (number < 0 && negativeInFront && prefix.length > 0)
|
||||
prefix = neg + prefix;
|
||||
else if (number < 0)
|
||||
returnString = neg + returnString;
|
||||
|
||||
if (!options.decimalSeparatorAlwaysShown) {
|
||||
if (returnString.lastIndexOf(dec) == returnString.length - 1) {
|
||||
returnString = returnString.substring(0, returnString.length - 1);
|
||||
}
|
||||
}
|
||||
returnString = prefix + returnString + suffix;
|
||||
return returnString;
|
||||
};
|
||||
|
||||
|
||||
/* Parsing Methods */
|
||||
|
||||
|
||||
/**
|
||||
* Parses a number of given format from the element and returns a Number object.
|
||||
* @param {Object} options
|
||||
*/
|
||||
jQuery.fn.parseNumber = function(options, writeBack, giveReturnValue) {
|
||||
// enforce defaults
|
||||
if (writeBack == null)
|
||||
writeBack = true;
|
||||
if (giveReturnValue == null)
|
||||
giveReturnValue = true;
|
||||
|
||||
// get text
|
||||
var text;
|
||||
if (jQuery(this).is(":input"))
|
||||
text = new String(jQuery(this).val());
|
||||
else
|
||||
text = new String(jQuery(this).text());
|
||||
|
||||
// parse text
|
||||
var number = jQuery.parseNumber(text, options);
|
||||
|
||||
if (number) {
|
||||
if (writeBack) {
|
||||
if (jQuery(this).is(":input"))
|
||||
jQuery(this).val(number.toString());
|
||||
else
|
||||
jQuery(this).text(number.toString());
|
||||
}
|
||||
if (giveReturnValue)
|
||||
return number;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Parses a string of given format into a Number object.
|
||||
*
|
||||
* @param {Object} string
|
||||
* @param {Object} options
|
||||
*/
|
||||
jQuery.parseNumber = function(numberString, options) {
|
||||
var options = jQuery.extend({}, jQuery.fn.parseNumber.defaults, options);
|
||||
var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
|
||||
|
||||
var dec = formatData.dec;
|
||||
var group = formatData.group;
|
||||
var neg = formatData.neg;
|
||||
|
||||
var valid = "1234567890.-";
|
||||
|
||||
// now we need to convert it into a number
|
||||
while (numberString.indexOf(group)>-1)
|
||||
numberString = numberString.replace(group,'');
|
||||
numberString = numberString.replace(dec,".").replace(neg,"-");
|
||||
var validText = "";
|
||||
var hasPercent = false;
|
||||
if (numberString.charAt(numberString.length - 1) == "%" || options.isPercentage == true)
|
||||
hasPercent = true;
|
||||
for (var i=0; i<numberString.length; i++) {
|
||||
if (valid.indexOf(numberString.charAt(i))>-1)
|
||||
validText = validText + numberString.charAt(i);
|
||||
}
|
||||
var number = new Number(validText);
|
||||
if (hasPercent) {
|
||||
number = number / 100;
|
||||
var decimalPos = validText.indexOf('.');
|
||||
if (decimalPos != -1) {
|
||||
var decimalPoints = validText.length - decimalPos - 1;
|
||||
number = number.toFixed(decimalPoints + 2);
|
||||
} else {
|
||||
number = number.toFixed(validText.length - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return number;
|
||||
};
|
||||
|
||||
jQuery.fn.parseNumber.defaults = {
|
||||
locale: "us",
|
||||
decimalSeparatorAlwaysShown: false,
|
||||
isPercentage: false,
|
||||
isFullLocale: false
|
||||
};
|
||||
|
||||
jQuery.fn.formatNumber.defaults = {
|
||||
format: "#,###.00",
|
||||
locale: "us",
|
||||
decimalSeparatorAlwaysShown: false,
|
||||
nanForceZero: true,
|
||||
round: true,
|
||||
isFullLocale: false
|
||||
};
|
||||
|
||||
Number.prototype.toFixed = function(precision) {
|
||||
return jQuery._roundNumber(this, precision);
|
||||
};
|
||||
|
||||
jQuery._roundNumber = function(number, decimalPlaces) {
|
||||
var power = Math.pow(10, decimalPlaces || 0);
|
||||
var value = String(Math.round(number * power) / power);
|
||||
|
||||
// ensure the decimal places are there
|
||||
if (decimalPlaces > 0) {
|
||||
var dp = value.indexOf(".");
|
||||
if (dp == -1) {
|
||||
value += '.';
|
||||
dp = 0;
|
||||
} else {
|
||||
dp = value.length - (dp + 1);
|
||||
}
|
||||
|
||||
while (dp < decimalPlaces) {
|
||||
value += '0';
|
||||
dp++;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user