服务器提供包含字符串的JSON,例如1234567.89
。
如何将其转换为$ 1,234,568
?
根据How can I format numbers as money in JavaScript?,我可以将其转换为$ 1,234,567.89
。
return "$ " + parseFloat(n).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
虽然不完美,因为它会向下舍入到最接近的美元,但我认为以下内容可行,但事实并非如此:
return "$ " + parseFloat(n).toFixed(0).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
我也未能成功尝试以下内容:
return "$ " + Math.round(parseFloat(n)).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
答案 0 :(得分:3)
function roundToDollars(n) {
return "$ " +
parseFloat(n).toFixed(0)
.replace(/(\d)(?=(\d{3})+$)/g, "$1,");
}
请注意,我不认为您要求的功能是个好主意:
顺便说一句,我从你的例子中改变的是"终结者"检测 - 由于数量是四舍五入的,我不是要寻找一个点(\.
),而只是寻找字符串的末尾($
)。要兼容两者,您可以使用正则表达式/(\d)(?=(\d{3})+(\.|$))/g
。
答案 1 :(得分:1)
试试这个:
function formatNumber(val){
val = Math.round(parseFloat(val));
while (/(\d+)(\d{3})/.test(val.toString())){
val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
}
return '$ ' + val;
}
alert(formatNumber(1234567.89));
小提琴:
http://jsfiddle.net/dybg5ye1/2/
修改:忘记了美元符号:)