在c#中你可以这样做
String.format(5000, "$###,###,##0.00;-$###,###,##0.00;$0.00")
将输出:$5,000
或者你可以这样做
String.format(-5000, "$###,###,##0.00;-$###,###,##0.00;$0.00")
将输出:-$5,000
我如何在Javascript中做同样的事情?
更新:我还需要格式化这样的货币
String.format(-5000, "###.###.##0.00€;-###,###,##0.00€;0.00€")
哪个会输出:5.000,00 €
答案 0 :(得分:0)
你应该考虑使用toLocaleString,这样你的代码可以依赖于语言环境和货币等配置设置,而不是自定义的字符串格式模式。
const formatCurrency = (num, locale = 'en-US', currency = 'USD', minimumFractionDigits = 2) => {
if (isNaN(num)) {
return num;
}
return num.toLocaleString(locale, {style: 'currency', currency, minimumFractionDigits});
};
以下是fiddle
的示例答案 1 :(得分:-1)
我结束了我自己:
app.filter('formatMoney', ['$filter', function ($filter) {
return function (value, format) {
var v = format.split(';');
var index = 2;
if (value > 0)
index = 0;
else if (value < 0)
index = 1;
else {
return v[index];
}
var len = v[index].length;
var fIndex = v[index].indexOf('#');
var lIndex = v[index].lastIndexOf('0');
var f = v[index].substring(fIndex, lIndex + 1);
var symbolFirst = '';
var symbolLast = '';
if (lIndex !== len - 1) {
symbolLast = v[index].substring(len, len - 1);
}
if (fIndex > 0) {
symbolFirst = v[index].substring(0, fIndex);
}
var valueStr = value.toFixed(2).toString();
for (var i = f.length - 1; i > 0 && valueStr.length > 0; i--) {
var slice = valueStr.slice(-1);
if (f[i] === '#' || f[i].isNumeric()) {
valueStr = valueStr.slice(0, -1);
if (slice.isNumeric()) {
f = f.replaceAt(i, slice);
var j = valueStr.length - 1;
while (j > 0 && !valueStr[j].isNumeric()) {
valueStr = valueStr.slice(0, -1);
j = j - 1;
}
}
}
}
return symbolFirst + f.substr(f.search(/\d/), f.length - 1) + symbolLast;
};
}]);