in globalize/globalize.ts [760:831]
formatNumber = function (value, format, culture) {
if (!format || format === "i") {
return culture.name.length ? value.toLocaleString() : value.toString();
}
format = format || "D";
var nf = culture.numberFormat,
number = Math.abs(value),
precision = -1,
pattern;
if (format.length > 1) precision = parseInt(format.slice(1), 10);
var current = format.charAt(0).toUpperCase(),
formatInfo;
switch (current) {
case "D":
pattern = "n";
if (precision !== -1) {
number = zeroPad("" + number, precision, true);
}
if (value < 0) number = -number;
break;
case "N":
formatInfo = nf;
// fall through
case "C":
formatInfo = formatInfo || nf.currency;
// fall through
case "P":
formatInfo = formatInfo || nf.percent;
pattern = value < 0 ? formatInfo.pattern[0] : (formatInfo.pattern[1] || "n");
if (precision === -1) precision = formatInfo.decimals;
number = expandNumber(number * (current === "P" ? 100 : 1), precision, formatInfo);
break;
default:
throw "Bad number format specifier: " + current;
}
var patternParts = /n|\$|-|%/g,
ret = "";
for (; ;) {
var index = patternParts.lastIndex,
ar = patternParts.exec(pattern);
ret += pattern.slice(index, ar ? ar.index : pattern.length);
if (!ar) {
break;
}
switch (ar[0]) {
case "n":
ret += number;
break;
case "$":
ret += nf.currency.symbol;
break;
case "-":
// don't make 0 negative
if (/[1-9]/.test(number.toString())) {
ret += nf["-"];
}
break;
case "%":
ret += nf.percent.symbol;
break;
}
}
return ret;
};