圆形javascript字符串和显示美元格式,没有小数

时间:2014-11-02 12:58:15

标签: 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,");

2 个答案:

答案 0 :(得分:3)

function roundToDollars(n) { 
    return "$ " + 
        parseFloat(n).toFixed(0)
            .replace(/(\d)(?=(\d{3})+$)/g, "$1,"); 
}

请注意,我不认为您要求的功能是个好主意:

  • 您正在使用(不精确)浮点数进行十进制算术。
  • 和您在这里的输入 - " n" - 是一个字符串,当它真的不是一个字符串时。
  • 听起来像是"格式编号"和"前置$"和#34;绕到最近的"比特都是正交的,一个更干净的API不会把它粘在一个函数中。

顺便说一句,我从你的例子中改变的是"终结者"检测 - 由于数量是四舍五入的,我不是要寻找一个点(\.),而只是寻找字符串的末尾($)。要兼容两者,您可以使用正则表达式/(\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/

修改:忘记了美元符号:)