Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function NumberFormat(num, inputDecimal) {
- this.VERSION = 'Number Format v1.5.4';
- this.COMMA = ',';
- this.PERIOD = '.';
- this.DASH = '-';
- this.LEFT_PAREN = '(';
- this.RIGHT_PAREN = ')';
- this.LEFT_OUTSIDE = 0;
- this.LEFT_INSIDE = 1;
- this.RIGHT_INSIDE = 2;
- this.RIGHT_OUTSIDE = 3;
- this.LEFT_DASH = 0;
- this.RIGHT_DASH = 1;
- this.PARENTHESIS = 2;
- this.NO_ROUNDING = -1
- this.num;
- this.numOriginal;
- this.hasSeparators = false;
- this.separatorValue;
- this.inputDecimalValue;
- this.decimalValue;
- this.negativeFormat;
- this.negativeRed;
- this.hasCurrency;
- this.currencyPosition;
- this.currencyValue;
- this.places;
- this.roundToPlaces;
- this.truncate;
- this.setNumber = setNumberNF;
- this.toUnformatted = toUnformattedNF;
- this.setInputDecimal = setInputDecimalNF;
- this.setSeparators = setSeparatorsNF;
- this.setCommas = setCommasNF;
- this.setNegativeFormat = setNegativeFormatNF;
- this.setNegativeRed = setNegativeRedNF;
- this.setCurrency = setCurrencyNF;
- this.setCurrencyPrefix = setCurrencyPrefixNF;
- this.setCurrencyValue = setCurrencyValueNF;
- this.setCurrencyPosition = setCurrencyPositionNF;
- this.setPlaces = setPlacesNF;
- this.toFormatted = toFormattedNF;
- this.toPercentage = toPercentageNF;
- this.getOriginal = getOriginalNF;
- this.moveDecimalRight = moveDecimalRightNF;
- this.moveDecimalLeft = moveDecimalLeftNF;
- this.getRounded = getRoundedNF;
- this.preserveZeros = preserveZerosNF;
- this.justNumber = justNumberNF;
- this.expandExponential = expandExponentialNF;
- this.getZeros = getZerosNF;
- this.moveDecimalAsString = moveDecimalAsStringNF;
- this.moveDecimal = moveDecimalNF;
- this.addSeparators = addSeparatorsNF;
- if (inputDecimal == null) {
- this.setNumber(num, this.PERIOD);
- } else {
- this.setNumber(num, inputDecimal);
- }
- this.setCommas(true);
- this.setNegativeFormat(this.LEFT_DASH);
- this.setNegativeRed(false);
- this.setCurrency(false);
- this.setCurrencyPrefix('$');
- this.setPlaces(2);
- }
- function setInputDecimalNF(val) {
- this.inputDecimalValue = val;
- }
- function setNumberNF(num, inputDecimal) {
- if (inputDecimal != null) {
- this.setInputDecimal(inputDecimal);
- }
- this.numOriginal = num;
- this.num = this.justNumber(num);
- }
- function toUnformattedNF() {
- return (this.num);
- }
- function getOriginalNF() {
- return (this.numOriginal);
- }
- function setNegativeFormatNF(format) {
- this.negativeFormat = format;
- }
- function setNegativeRedNF(isRed) {
- this.negativeRed = isRed;
- }
- function setSeparatorsNF(isC, separator, decimal) {
- this.hasSeparators = isC;
- if (separator == null) separator = this.COMMA;
- if (decimal == null) decimal = this.PERIOD;
- if (separator == decimal) {
- this.decimalValue = (decimal == this.PERIOD) ? this.COMMA : this.PERIOD;
- } else {
- this.decimalValue = decimal;
- }
- this.separatorValue = separator;
- }
- function setCommasNF(isC) {
- this.setSeparators(isC, this.COMMA, this.PERIOD);
- }
- function setCurrencyNF(isC) {
- this.hasCurrency = isC;
- }
- function setCurrencyValueNF(val) {
- this.currencyValue = val;
- }
- function setCurrencyPrefixNF(cp) {
- this.setCurrencyValue(cp);
- this.setCurrencyPosition(this.LEFT_OUTSIDE);
- }
- function setCurrencyPositionNF(cp) {
- this.currencyPosition = cp
- }
- function setPlacesNF(p, tr) {
- this.roundToPlaces = !(p == this.NO_ROUNDING);
- this.truncate = (tr != null && tr);
- this.places = (p < 0) ? 0 : p;
- }
- function addSeparatorsNF(nStr, inD, outD, sep) {
- nStr += '';
- var dpos = nStr.indexOf(inD);
- var nStrEnd = '';
- if (dpos != -1) {
- nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
- nStr = nStr.substring(0, dpos);
- }
- var rgx = /(\d+)(\d{3})/;
- while (rgx.test(nStr)) {
- nStr = nStr.replace(rgx, '$1' + sep + '$2');
- }
- return nStr + nStrEnd;
- }
- function toFormattedNF() {
- var pos;
- var nNum = this.num;
- var nStr;
- var splitString = new Array(2);
- if (this.roundToPlaces) {
- nNum = this.getRounded(nNum);
- nStr = this.preserveZeros(Math.abs(nNum));
- } else {
- nStr = this.expandExponential(Math.abs(nNum));
- }
- if (this.hasSeparators) {
- nStr = this.addSeparators(nStr, this.PERIOD, this.decimalValue, this.separatorValue);
- } else {
- nStr = nStr.replace(new RegExp('\\' + this.PERIOD), this.decimalValue);
- }
- var c0 = '';
- var n0 = '';
- var c1 = '';
- var n1 = '';
- var n2 = '';
- var c2 = '';
- var n3 = '';
- var c3 = '';
- var negSignL = (this.negativeFormat == this.PARENTHESIS) ? this.LEFT_PAREN : this.DASH;
- var negSignR = (this.negativeFormat == this.PARENTHESIS) ? this.RIGHT_PAREN : this.DASH;
- if (this.currencyPosition == this.LEFT_OUTSIDE) {
- if (nNum < 0) {
- if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
- if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
- }
- if (this.hasCurrency) c0 = this.currencyValue;
- } else if (this.currencyPosition == this.LEFT_INSIDE) {
- if (nNum < 0) {
- if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
- if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
- }
- if (this.hasCurrency) c1 = this.currencyValue;
- } else if (this.currencyPosition == this.RIGHT_INSIDE) {
- if (nNum < 0) {
- if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
- if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
- }
- if (this.hasCurrency) c2 = this.currencyValue;
- } else if (this.currencyPosition == this.RIGHT_OUTSIDE) {
- if (nNum < 0) {
- if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
- if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
- }
- if (this.hasCurrency) c3 = this.currencyValue;
- }
- nStr = c0 + n0 + c1 + n1 + nStr + n2 + c2 + n3 + c3;
- if (this.negativeRed && nNum < 0) {
- nStr = '<font color="red">' + nStr + '</font>';
- }
- return (nStr);
- }
- function toPercentageNF() {
- nNum = this.num * 100;
- nNum = this.getRounded(nNum);
- return nNum + '%';
- }
- function getZerosNF(places) {
- var extraZ = '';
- var i;
- for (i = 0; i < places; i++) {
- extraZ += '0';
- }
- return extraZ;
- }
- function expandExponentialNF(origVal) {
- if (isNaN(origVal)) return origVal;
- var newVal = parseFloat(origVal) + '';
- var eLoc = newVal.toLowerCase().indexOf('e');
- if (eLoc != -1) {
- var plusLoc = newVal.toLowerCase().indexOf('+');
- var negLoc = newVal.toLowerCase().indexOf('-', eLoc);
- var justNumber = newVal.substring(0, eLoc);
- if (negLoc != -1) {
- var places = newVal.substring(negLoc + 1, newVal.length);
- justNumber = this.moveDecimalAsString(justNumber, true, parseInt(places));
- } else {
- if (plusLoc == -1) plusLoc = eLoc;
- var places = newVal.substring(plusLoc + 1, newVal.length);
- justNumber = this.moveDecimalAsString(justNumber, false, parseInt(places));
- }
- newVal = justNumber;
- }
- return newVal;
- }
- function moveDecimalRightNF(val, places) {
- var newVal = '';
- if (places == null) {
- newVal = this.moveDecimal(val, false);
- } else {
- newVal = this.moveDecimal(val, false, places);
- }
- return newVal;
- }
- function moveDecimalLeftNF(val, places) {
- var newVal = '';
- if (places == null) {
- newVal = this.moveDecimal(val, true);
- } else {
- newVal = this.moveDecimal(val, true, places);
- }
- return newVal;
- }
- function moveDecimalAsStringNF(val, left, places) {
- var spaces = (arguments.length < 3) ? this.places : places;
- if (spaces <= 0) return val;
- var newVal = val + '';
- var extraZ = this.getZeros(spaces);
- var re1 = new RegExp('([0-9.]+)');
- if (left) {
- newVal = newVal.replace(re1, extraZ + '$1');
- var re2 = new RegExp('(-?)([0-9]*)([0-9]{' + spaces + '})(\\.?)');
- newVal = newVal.replace(re2, '$1$2.$3');
- } else {
- var reArray = re1.exec(newVal);
- if (reArray != null) {
- newVal = newVal.substring(0, reArray.index) + reArray[1] + extraZ + newVal.substring(reArray.index + reArray[0].length);
- }
- var re2 = new RegExp('(-?)([0-9]*)(\\.?)([0-9]{' + spaces + '})');
- newVal = newVal.replace(re2, '$1$2$4.');
- }
- newVal = newVal.replace(/\.$/, '');
- return newVal;
- }
- function moveDecimalNF(val, left, places) {
- var newVal = '';
- if (places == null) {
- newVal = this.moveDecimalAsString(val, left);
- } else {
- newVal = this.moveDecimalAsString(val, left, places);
- }
- return parseFloat(newVal);
- }
- function getRoundedNF(val) {
- val = this.moveDecimalRight(val);
- if (this.truncate) {
- val = val >= 0 ? Math.floor(val) : Math.ceil(val);
- } else {
- val = Math.round(val);
- }
- val = this.moveDecimalLeft(val);
- return val;
- }
- function preserveZerosNF(val) {
- var i;
- val = this.expandExponential(val);
- if (this.places <= 0) return val;
- var decimalPos = val.indexOf('.');
- if (decimalPos == -1) {
- val += '.';
- for (i = 0; i < this.places; i++) {
- val += '0';
- }
- } else {
- var actualDecimals = (val.length - 1) - decimalPos;
- var difference = this.places - actualDecimals;
- for (i = 0; i < difference; i++) {
- val += '0';
- }
- }
- return val;
- }
- function justNumberNF(val) {
- newVal = val + '';
- var isPercentage = false;
- if (newVal.indexOf('%') != -1) {
- newVal = newVal.replace(/\%/g, '');
- isPercentage = true;
- }
- var re = new RegExp('[^\\' + this.inputDecimalValue + '\\d\\-\\+\\(\\)eE]', 'g');
- newVal = newVal.replace(re, '');
- var tempRe = new RegExp('[' + this.inputDecimalValue + ']', 'g');
- var treArray = tempRe.exec(newVal);
- if (treArray != null) {
- var tempRight = newVal.substring(treArray.index + treArray[0].length);
- newVal = newVal.substring(0, treArray.index) + this.PERIOD + tempRight.replace(tempRe, '');
- }
- if (newVal.charAt(newVal.length - 1) == this.DASH) {
- newVal = newVal.substring(0, newVal.length - 1);
- newVal = '-' + newVal;
- } else if (newVal.charAt(0) == this.LEFT_PAREN && newVal.charAt(newVal.length - 1) == this.RIGHT_PAREN) {
- newVal = newVal.substring(1, newVal.length - 1);
- newVal = '-' + newVal;
- }
- newVal = parseFloat(newVal);
- if (!isFinite(newVal)) {
- newVal = 0;
- }
- if (isPercentage) {
- newVal = this.moveDecimalLeft(newVal, 2);
- }
- return newVal;
- }
Advertisement
Add Comment
Please, Sign In to add comment