javascript - 舍入 javascript 字符串并显示不带小数的美元格式

标签 javascript regex formatting

服务器提供包含字符串的 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/

相关文章:

javascript - 背景图片幻灯片无法正常工作

javascript - 构建像 yahoo.com slider 一样的 Jquery Tool slider 详细信息

javascript - 使用 Bootstrap 进行页面导航

javascript - 返回数组中元素的索引范围

c++ - 如何格式化数字?

regex - R中非常大的文件的字符串匹配

javascript - 为什么我的正则表达式让我写 ","(逗号)?

javascript - Mongoose.js 和使用 Regexp 的查询对象

java - 如何理解和使用 "program API"?

java - Play 2.0 中带有泛型的自定义格式化程序