* 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)
| 19665 | * @return {string} The number formatted as a string |
| 19666 | */ |
| 19667 | function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { |
| 19668 | |
| 19669 | if (!(isString(number) || isNumber(number)) || isNaN(number)) return ''; |
| 19670 | |
| 19671 | var isInfinity = !isFinite(number); |
| 19672 | var isZero = false; |
| 19673 | var numStr = Math.abs(number) + '', |
| 19674 | formattedText = '', |
| 19675 | parsedNumber; |
| 19676 | |
| 19677 | if (isInfinity) { |
| 19678 | formattedText = '\u221e'; |
| 19679 | } else { |
| 19680 | parsedNumber = parse(numStr); |
| 19681 | |
| 19682 | roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac); |
| 19683 | |
| 19684 | var digits = parsedNumber.d; |
| 19685 | var integerLen = parsedNumber.i; |
| 19686 | var exponent = parsedNumber.e; |
| 19687 | var decimals = []; |
| 19688 | isZero = digits.reduce(function(isZero, d) { return isZero && !d; }, true); |
| 19689 | |
| 19690 | // pad zeros for small numbers |
| 19691 | while (integerLen < 0) { |
| 19692 | digits.unshift(0); |
| 19693 | integerLen++; |
| 19694 | } |
| 19695 | |
| 19696 | // extract decimals digits |
| 19697 | if (integerLen > 0) { |
| 19698 | decimals = digits.splice(integerLen); |
| 19699 | } else { |
| 19700 | decimals = digits; |
| 19701 | digits = [0]; |
| 19702 | } |
| 19703 | |
| 19704 | // format the integer digits with grouping separators |
| 19705 | var groups = []; |
| 19706 | if (digits.length > pattern.lgSize) { |
| 19707 | groups.unshift(digits.splice(-pattern.lgSize).join('')); |
| 19708 | } |
| 19709 | while (digits.length > pattern.gSize) { |
| 19710 | groups.unshift(digits.splice(-pattern.gSize).join('')); |
| 19711 | } |
| 19712 | if (digits.length) { |
| 19713 | groups.unshift(digits.join('')); |
| 19714 | } |
| 19715 | formattedText = groups.join(groupSep); |
| 19716 | |
| 19717 | // append the decimal digits |
| 19718 | if (decimals.length) { |
| 19719 | formattedText += decimalSep + decimals.join(''); |
| 19720 | } |
| 19721 | |
| 19722 | if (exponent) { |
| 19723 | formattedText += 'e+' + exponent; |
| 19724 | } |
no test coverage detected