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