* Format a number into a string * @param {number} number The number to format * @param {{ * minFrac, // the minimum number of digits required in the fraction part of the number * maxFrac, // the maximum number of digits required in the fraction part of the number *
(number, pattern, groupSep, decimalSep, fractionSize)
| 21518 | * @return {string} The number formatted as a string |
| 21519 | */ |
| 21520 | function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { |
| 21521 | |
| 21522 | if (!(isString(number) || isNumber(number)) || isNaN(number)) return ''; |
| 21523 | |
| 21524 | var isInfinity = !isFinite(number); |
| 21525 | var isZero = false; |
| 21526 | var numStr = Math.abs(number) + '', |
| 21527 | formattedText = '', |
| 21528 | parsedNumber; |
| 21529 | |
| 21530 | if (isInfinity) { |
| 21531 | formattedText = '\u221e'; |
| 21532 | } else { |
| 21533 | parsedNumber = parse(numStr); |
| 21534 | |
| 21535 | roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac); |
| 21536 | |
| 21537 | var digits = parsedNumber.d; |
| 21538 | var integerLen = parsedNumber.i; |
| 21539 | var exponent = parsedNumber.e; |
| 21540 | var decimals = []; |
| 21541 | isZero = digits.reduce(function(isZero, d) { return isZero && !d; }, true); |
| 21542 | |
| 21543 | // pad zeros for small numbers |
| 21544 | while (integerLen < 0) { |
| 21545 | digits.unshift(0); |
| 21546 | integerLen++; |
| 21547 | } |
| 21548 | |
| 21549 | // extract decimals digits |
| 21550 | if (integerLen > 0) { |
| 21551 | decimals = digits.splice(integerLen, digits.length); |
| 21552 | } else { |
| 21553 | decimals = digits; |
| 21554 | digits = [0]; |
| 21555 | } |
| 21556 | |
| 21557 | // format the integer digits with grouping separators |
| 21558 | var groups = []; |
| 21559 | if (digits.length >= pattern.lgSize) { |
| 21560 | groups.unshift(digits.splice(-pattern.lgSize, digits.length).join('')); |
| 21561 | } |
| 21562 | while (digits.length > pattern.gSize) { |
| 21563 | groups.unshift(digits.splice(-pattern.gSize, digits.length).join('')); |
| 21564 | } |
| 21565 | if (digits.length) { |
| 21566 | groups.unshift(digits.join('')); |
| 21567 | } |
| 21568 | formattedText = groups.join(groupSep); |
| 21569 | |
| 21570 | // append the decimal digits |
| 21571 | if (decimals.length) { |
| 21572 | formattedText += decimalSep + decimals.join(''); |
| 21573 | } |
| 21574 | |
| 21575 | if (exponent) { |
| 21576 | formattedText += 'e+' + exponent; |
| 21577 | } |
no test coverage detected