MCPcopy Create free account
hub / github.com/angular/angular / parseNumber

Function parseNumber

packages/common/src/i18n/format_number.ts:401–455  ·  view source on GitHub ↗

* Parses a number. * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/

(num: number)

Source from the content-addressed store, hash-verified

399 * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/
400 */
401function parseNumber(num: number): ParsedNumber {
402 let numStr = Math.abs(num) + '';
403 let exponent = 0,
404 digits,
405 integerLen;
406 let i, j, zeros;
407
408 // Decimal point?
409 if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
410 numStr = numStr.replace(DECIMAL_SEP, '');
411 }
412
413 // Exponential form?
414 if ((i = numStr.search(/e/i)) > 0) {
415 // Work out the exponent.
416 if (integerLen < 0) integerLen = i;
417 integerLen += +numStr.slice(i + 1);
418 numStr = numStr.substring(0, i);
419 } else if (integerLen < 0) {
420 // There was no decimal point or exponent so it is an integer.
421 integerLen = numStr.length;
422 }
423
424 // Count the number of leading zeros.
425 for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {
426 /* empty */
427 }
428
429 if (i === (zeros = numStr.length)) {
430 // The digits are all zero.
431 digits = [0];
432 integerLen = 1;
433 } else {
434 // Count the number of trailing zeros
435 zeros--;
436 while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;
437
438 // Trailing zeros are insignificant so ignore them
439 integerLen -= i;
440 digits = [];
441 // Convert string to array of digits without leading/trailing zeros.
442 for (j = 0; i <= zeros; i++, j++) {
443 digits[j] = Number(numStr.charAt(i));
444 }
445 }
446
447 // If the number overflows the maximum allowed digits then use an exponent.
448 if (integerLen > MAX_DIGITS) {
449 digits = digits.splice(0, MAX_DIGITS - 1);
450 exponent = integerLen - 1;
451 integerLen = 1;
452 }
453
454 return {digits, exponent, integerLen};
455}
456
457/**
458 * Round the parsed number to the specified number of decimal places

Callers 1

Calls 4

indexOfMethod · 0.80
charAtMethod · 0.80
replaceMethod · 0.45
searchMethod · 0.45

Tested by

no test coverage detected