MCPcopy Create free account
hub / github.com/OpenReservation/OpenReservation / parse

Function parse

OpenReservation/wwwroot/Scripts/angular.js:20053–20102  ·  view source on GitHub ↗

* Parse a number (as a string) into three components that can be used * for formatting the number. * * (Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/) * * @param {string} numStr The number to parse * @return {object} An object de

(numStr)

Source from the content-addressed store, hash-verified

20051 *
20052 */
20053 function parse(numStr) {
20054 var exponent = 0, digits, numberOfIntegerDigits;
20055 var i, j, zeros;
20056
20057 // Decimal point?
20058 if ((numberOfIntegerDigits = numStr.indexOf(DECIMAL_SEP)) > -1) {
20059 numStr = numStr.replace(DECIMAL_SEP, '');
20060 }
20061
20062 // Exponential form?
20063 if ((i = numStr.search(/e/i)) > 0) {
20064 // Work out the exponent.
20065 if (numberOfIntegerDigits < 0) numberOfIntegerDigits = i;
20066 numberOfIntegerDigits += +numStr.slice(i + 1);
20067 numStr = numStr.substring(0, i);
20068 } else if (numberOfIntegerDigits < 0) {
20069 // There was no decimal point or exponent so it is an integer.
20070 numberOfIntegerDigits = numStr.length;
20071 }
20072
20073 // Count the number of leading zeros.
20074 for (i = 0; numStr.charAt(i) == ZERO_CHAR; i++);
20075
20076 if (i == (zeros = numStr.length)) {
20077 // The digits are all zero.
20078 digits = [0];
20079 numberOfIntegerDigits = 1;
20080 } else {
20081 // Count the number of trailing zeros
20082 zeros--;
20083 while (numStr.charAt(zeros) == ZERO_CHAR) zeros--;
20084
20085 // Trailing zeros are insignificant so ignore them
20086 numberOfIntegerDigits -= i;
20087 digits = [];
20088 // Convert string to array of digits without leading/trailing zeros.
20089 for (j = 0; i <= zeros; i++ , j++) {
20090 digits[j] = +numStr.charAt(i);
20091 }
20092 }
20093
20094 // If the number overflows the maximum allowed digits then use an exponent.
20095 if (numberOfIntegerDigits > MAX_DIGITS) {
20096 digits = digits.splice(0, MAX_DIGITS - 1);
20097 exponent = numberOfIntegerDigits - 1;
20098 numberOfIntegerDigits = 1;
20099 }
20100
20101 return { d: digits, e: exponent, i: numberOfIntegerDigits };
20102 }
20103
20104 /**
20105 * Round the parsed number to the specified number of decimal places

Callers 2

$SceProviderFunction · 0.85
formatNumberFunction · 0.85

Calls 3

isUndefinedFunction · 0.85
forEachFunction · 0.85
trimFunction · 0.85

Tested by

no test coverage detected