不使用toLocaleString()或Intl.NumberFormat()的货币格式

时间:2019-04-15 15:17:06

标签: javascript jquery currency currency-formatting

我知道有人问过几次类似的问题。 区别在于,我不能使用使用.toLocalString()或出色的Intl.NumberFormat()的解决方案。

相反,我必须从头开始构建一个格式化程序,而我已经开始使用这部分代码来这样做了:

var currCurrency = "EUR";

function Format__Currency(val, currency) {

    switch (currency) {
        case 'EUR':
            currencyFormat = '0,00';
            val = val.replace('.', ',');
            val = currencyFormat.replace('0,00', val);
            break;
        case 'CHF':
            currencyFormat = '0.00';
            val = val.replace(',', '.');
            val = currencyFormat.replace('0.00', val);
            break;
        case 'USD':
            currencyFormat = '0.00';
            val = currencyFormat.replace('0.00', val);
            break;
        default:
            throw new Error('Unknown currency format');
            break;
    }
    return val;
}


var price = Format__Currency("1929.90", "EUR")
$("#result").html(price);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div id="result"> - </div>

“手动版本”对我来说还可以,因为我只需要支持4或5种货币,我就会知道它们的格式是什么。

我的问题是,当前我只能更改小数点后的分频器。但是也有数千个分隔符。例如,美元1,920.90,欧元1.920.90或瑞士法郎1,920.90。

如何解决?

PS:如果投下反对票的人可以告诉我这个问题是什么地方?

1 个答案:

答案 0 :(得分:1)

function numberToReal(numero) {
    var numero = numero.toFixed(2).split('.');
    numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.');
    return numero.join(',');
}

var x = numberToReal(9999000.33);
console.log(x);

var y = numberToReal(100000);
console.log(y);

var z = numberToReal(10.50);
console.log(z);

首先,我得到带小数点后两位的数字,并分成两个位置(点之前和之后)的数组

var numero = numero.toFixed(2).split('.');

这样,在第二行中,我可以处理除小数点(numero[0])以外的数字

numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.');

所以我用逗号返回带小数点后加格式的数字(在巴西,我们用commo来表示小数位)

return numero.join(',');