format()

in index.js [120:182]


	format(number, locale = {}) {
		const formatLocale = Object.assign({}, this.defaultLocale, locale);

		if (typeof number !== 'number') {
			throw new TypeError(`Argument must be a number, received: ${typeof number}`);
		} else if (this.hasMantissa) {
			return number.toExponential();
		} else {
			const isNegative = DecimalFormat.isNegative(number);
			let [integerString, fractionString] = Math.abs(number * this.multiplier).toFixed(this.maximumFractionDigits).split('.');

			if (this.isDecimalSeparatorAlwaysShown) {
				const optionalFractionalDigits = this.maximumFractionDigits - this.minimumFractionDigits;

				// Remove optional zeroes in fraction
				if (optionalFractionalDigits > 0) {
					const re = new RegExp('0{0,' + optionalFractionalDigits + '}$');
					fractionString = fractionString.replace(re, '');
				}

				// Remove the zero for matters like '#.0' with values like 0.5
				if (this.minimumFractionDigits > 0) {
					if (this.minimumIntegerDigits === 0 && integerString === '0') {
						integerString = '';
					}
				}

				// Add decimal separator if necessary
				if (fractionString && fractionString.length > 0) {
					fractionString = formatLocale.decimalSeparator + fractionString;
				} else if (optionalFractionalDigits === 0 && this.minimumFractionDigits === 0) {
					fractionString = formatLocale.decimalSeparator;
				} else {
					fractionString = '';
				}
			} else {
				fractionString = '';
			}

			// Minimum integer digits
			integerString = DecimalFormat.padStart(integerString, this.minimumIntegerDigits, '0');

			// Grouping
			if (this.hasMantissa === false && this.groupingSize > 0) {
				integerString = DecimalFormat.applyGrouping(integerString, this.groupingSize, formatLocale.groupingSeparator);
			}

			// Prefix and suffix for positive and negative numbers, respectively.
			let prefix, suffix;

			// This function is used to specifically check for negative zero (-0),
			// which returns the negative pattern in Java.
			if (isNegative) {
				prefix = this.negativePrefix;
				suffix = this.negativeSuffix;
			} else {
				prefix = this.positivePrefix;
				suffix = this.positiveSuffix;
			}

			return prefix + integerString + fractionString + suffix;
		}
	}