(number, pattern, groupSep, decimalSep, fractionSize)
| 9890 | |
| 9891 | var DECIMAL_SEP = '.'; |
| 9892 | function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { |
| 9893 | if (isNaN(number) || !isFinite(number)) return ''; |
| 9894 | |
| 9895 | var isNegative = number < 0; |
| 9896 | number = Math.abs(number); |
| 9897 | var numStr = number + '', |
| 9898 | formatedText = '', |
| 9899 | parts = []; |
| 9900 | |
| 9901 | var hasExponent = false; |
| 9902 | if (numStr.indexOf('e') !== -1) { |
| 9903 | var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); |
| 9904 | if (match && match[2] == '-' && match[3] > fractionSize + 1) { |
| 9905 | numStr = '0'; |
| 9906 | } else { |
| 9907 | formatedText = numStr; |
| 9908 | hasExponent = true; |
| 9909 | } |
| 9910 | } |
| 9911 | |
| 9912 | if (!hasExponent) { |
| 9913 | var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; |
| 9914 | |
| 9915 | // determine fractionSize if it is not specified |
| 9916 | if (isUndefined(fractionSize)) { |
| 9917 | fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); |
| 9918 | } |
| 9919 | |
| 9920 | var pow = Math.pow(10, fractionSize); |
| 9921 | number = Math.round(number * pow) / pow; |
| 9922 | var fraction = ('' + number).split(DECIMAL_SEP); |
| 9923 | var whole = fraction[0]; |
| 9924 | fraction = fraction[1] || ''; |
| 9925 | |
| 9926 | var pos = 0, |
| 9927 | lgroup = pattern.lgSize, |
| 9928 | group = pattern.gSize; |
| 9929 | |
| 9930 | if (whole.length >= (lgroup + group)) { |
| 9931 | pos = whole.length - lgroup; |
| 9932 | for (var i = 0; i < pos; i++) { |
| 9933 | if ((pos - i)%group === 0 && i !== 0) { |
| 9934 | formatedText += groupSep; |
| 9935 | } |
| 9936 | formatedText += whole.charAt(i); |
| 9937 | } |
| 9938 | } |
| 9939 | |
| 9940 | for (i = pos; i < whole.length; i++) { |
| 9941 | if ((whole.length - i)%lgroup === 0 && i !== 0) { |
| 9942 | formatedText += groupSep; |
| 9943 | } |
| 9944 | formatedText += whole.charAt(i); |
| 9945 | } |
| 9946 | |
| 9947 | // format fraction part. |
| 9948 | while(fraction.length < fractionSize) { |
| 9949 | fraction += '0'; |
no test coverage detected