使用Javascript格式化货币类型

时间:2014-12-30 01:17:09

标签: javascript c#

在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 €

2 个答案:

答案 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;
    };
}]);