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;
}
}