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

问题描述 投票:-1回答:1

我知道类似的问题已被问过很多次了。这里的区别是,我不能使用使用.toLocaleString()或精彩的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:如果失败的选民可以请告诉我这个问题有什么问题?

javascript jquery currency currency-formatting
1个回答
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);

首先,我得到2位小数的数字,我分成两个位数的数组(前后点)

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

这种方式在第二行我可以工作不包括小数点(numero[0])的数字

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

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

return numero.join(',');
© www.soinside.com 2019 - 2024. All rights reserved.