我正在尝试将一个数字格式化为巴西货币,但我不确定会出现什么问题。
function format2(n, currency) {
return currency + " " + n.toFixed(2).replace(^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$1,");
}
答案 0 :(得分:1)
Taken from the comments: “but its giving me a syntax error..”
你缺少一个斜杠来定义一个正则表达式文字。将您的退货声明更改为
return currency + " " + n.toFixed(2).replace(/^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$1,");
^ Teda, the magic opening slash!
顺便说一句,你的正则表达式过于复杂IMO并且格式不正确。我只需要/\./g
来获取匹配的句点,因此您的替换语句看起来像.replace(/\./g, ",");
答案 1 :(得分:0)
我不知道你为什么如此热衷于使用正则表达式。以下循环解决方案应该没问题,并提供更通用的解决方案:
function formatNumber(num, places, thou, point) {
var result = [];
num = Number(num).toFixed(places).split('.');
var m = num[0];
for (var s=m.length%3, i=s?0:1, iLen=m.length/3|0; i<=iLen; i++) {
result.push(m.substr(i? (i-1)*3+s : 0, i? 3 : s));
}
return result.join(thou) + point + num[1];
}
console.log('R$ ' + formatNumber(12345678.155, 2, '.', ',')); // R$ 12.345.678,16
console.log('R$ ' + formatNumber(12.155, 2, '.', ',')); // R$ 12,16