服务器提供包含字符串的 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,");
最佳答案
function roundToDollars(n) {
return "$ " +
parseFloat(n).toFixed(0)
.replace(/(\d)(?=(\d{3})+$)/g, "$1,");
}
请注意,我认为您要求的功能不是一个好主意:
- 您正在使用(不精确的) float 进行十进制算术。
- 这里的输入 - “n” - 是一个字符串,但它实际上不是一个字符串。
- 在我看来,“格式数字”、“前置 $”和“舍入到最近的”位都是正交的,更干净的 API 不会将其粘在一个函数中。
顺便说一句,我对你的示例所做的所有更改都是“终止符”检测 - 由于金额是四舍五入的,所以我不是在寻找点(\.
),而只是在寻找结束符字符串 ($
)。为了与两者兼容,您可以使用正则表达式 /(\d)(?=(\d{3})+(\.|$))/g
。
关于javascript - 舍入 javascript 字符串并显示不带小数的美元格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699534/