我知道有人问过几次类似的问题。 区别在于,我不能使用使用.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:如果投下反对票的人可以告诉我这个问题是什么地方?
答案 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(',');