* 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
(number, pattern, groupSep, decimalSep, fractionSize)
| 20162 | * @return {string} The number formatted as a string |
| 20163 | */ |
| 20164 | function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { |
| 20165 | if (!(isString(number) || isNumber(number)) || isNaN(number)) return ''; |
| 20166 | |
| 20167 | var isInfinity = !isFinite(number); |
| 20168 | var isZero = false; |
| 20169 | var numStr = Math.abs(number) + '', |
| 20170 | formattedText = '', |
| 20171 | parsedNumber; |
| 20172 | |
| 20173 | if (isInfinity) { |
| 20174 | formattedText = '\u221e'; |
| 20175 | } else { |
| 20176 | parsedNumber = parse(numStr); |
| 20177 | |
| 20178 | roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac); |
| 20179 | |
| 20180 | var digits = parsedNumber.d; |
| 20181 | var integerLen = parsedNumber.i; |
| 20182 | var exponent = parsedNumber.e; |
| 20183 | var decimals = []; |
| 20184 | isZero = digits.reduce(function (isZero, d) { return isZero && !d; }, true); |
| 20185 | |
| 20186 | // pad zeros for small numbers |
| 20187 | while (integerLen < 0) { |
| 20188 | digits.unshift(0); |
| 20189 | integerLen++; |
| 20190 | } |
| 20191 | |
| 20192 | // extract decimals digits |
| 20193 | if (integerLen > 0) { |
| 20194 | decimals = digits.splice(integerLen); |
| 20195 | } else { |
| 20196 | decimals = digits; |
| 20197 | digits = [0]; |
| 20198 | } |
| 20199 | |
| 20200 | // format the integer digits with grouping separators |
| 20201 | var groups = []; |
| 20202 | if (digits.length > pattern.lgSize) { |
| 20203 | groups.unshift(digits.splice(-pattern.lgSize).join('')); |
| 20204 | } |
| 20205 | while (digits.length > pattern.gSize) { |
| 20206 | groups.unshift(digits.splice(-pattern.gSize).join('')); |
| 20207 | } |
| 20208 | if (digits.length) { |
| 20209 | groups.unshift(digits.join('')); |
| 20210 | } |
| 20211 | formattedText = groups.join(groupSep); |
| 20212 | |
| 20213 | // append the decimal digits |
| 20214 | if (decimals.length) { |
| 20215 | formattedText += decimalSep + decimals.join(''); |
| 20216 | } |
| 20217 | |
| 20218 | if (exponent) { |
| 20219 | formattedText += 'e+' + exponent; |
| 20220 | } |
| 20221 | } |
no test coverage detected