在内容中查找数字并格式化它们

时间:2013-08-23 02:05:03

标签: javascript jquery regex string formatting

关于格式化为2位小数的问题很多,但我只找到了使用.val()的实例。如果数字是从.html()拉出的字符串,你怎么做?

我有一张桌子,里面有一些价格。这些价格作为字符串输入到不同的小数位,例如$ 100.5,$ 59.95,$ 0。

我需要每个数字为2位小数,例如$ 100.50,$ 59.95,$ 0.00。

在某些情况下,可能还有一个£而不是$。

2 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

$("#mytable").find("td").each(function () {
    var content = this.innerHTML;
    content = content.replace(/\$(\d*(?:\.\d*)?)/g, function (m1, m2) {
        return "$" + parseFloat(m2).toFixed(2);
    });
    this.innerHTML = content;
});

Fiddle

这将替换任何带有数字的美元符号的发现,然后将该数字固定为两位小数并替换它。


根据您的评论,为了允许£和$,请尝试使用此代替上述内容:

content = content.replace(/([£$])(\d*(?:\.\d*)?)/g, function (m0, m1, m2) {
    return m1 +""+ parseFloat(m2).toFixed(2);
});

Fiddle

它捕获[£$](任一符号之一)并将其放入第一个捕获组,并将其作为m1传递给函数,第一组是我们不想要的整个匹配真的,我们正在把它分成几部分。


根据您的第二条评论,如果您在currency中添加了td课程,并且您只有一个格式化的数字,并且不想触及货币符号,试试这个:

$("td.currency").each(function () {
    var content = this.innerHTML;
    content = content.replace(/(\d+(?:\.\d*)?)/g, function (m1, m2) {
        return parseFloat(m2).toFixed(2);
    });
    this.innerHTML = content;
});

Fiddle

请注意.currency单元格中的数字已更新。

答案 1 :(得分:0)

如果你能使用其他Java脚本我喜欢“sugarjs”http://sugarjs.com/features#number

你可以使用这样的代码

(125.425).round(2);
>125.43
(125.425).round(-2);
>100
(4235000).format();
>"4,235,000"
(50).pad(5);
>"00050"
(23).ordinalize();
>"23rd"