我有一个函数可以对html表中的一列数据进行求和。它确实令人钦佩,我只想把它放在那里,需要将数千个分开。最初,您会注意到,添加的数字中有逗号。因此该函数将添加它们,它们将被删除。如何在那里添加逗号?
<script type="text/javascript">
function sumOfColumns(tableID, columnIndex, hasHeader) {
var tot = 0;
$("#" + tableID + " tr" + (hasHeader ? ":gt(0)" : ""))
.children("td:nth-child(" + columnIndex + ")")
.each(function() {
tot += parseInt($(this).html().replace(',', ''));
});
return "Total Pounds Entered : " + tot;
}
</script>
答案 0 :(得分:76)
$(this).html().replace(',', '')
实际上不应该修改页面。你确定在页面中删除了逗号吗?
如果是,这个addCommas function应该可以解决问题。
function addCommas(nStr) {
nStr += '';
var x = nStr.split('.');
var x1 = x[0];
var x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
答案 1 :(得分:17)
这将添加千位分隔符,同时保留给定数字的小数部分:
function format(n, sep, decimals) {
sep = sep || "."; // Default to period as decimal separator
decimals = decimals || 2; // Default to 2 decimals
return n.toLocaleString().split(sep)[0]
+ sep
+ n.toFixed(decimals).split(sep)[1];
}
format(4567354.677623); // 4,567,354.68
您还可以使用以下方法探测区域设置的小数分隔符:
var sep = (0).toFixed(1)[1];
答案 2 :(得分:16)
使用toLocaleString()
在你的情况下做:
return "Total Pounds Entered : " + tot.toLocaleString();
答案 3 :(得分:4)
bit
使用:
<script>
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
</script>
==> 200,000
答案 4 :(得分:2)
我就是这样做的:
// 2056776401.50 = 2,056,776,401.50
function humanizeNumber(n) {
n = n.toString()
while (true) {
var n2 = n.replace(/(\d)(\d{3})($|,|\.)/g, '$1,$2$3')
if (n == n2) break
n = n2
}
return n
}
或者,在CoffeeScript中:
# 2056776401.50 = 2,056,776,401.50
humanizeNumber = (n) ->
n = n.toString()
while true
n2 = n.replace /(\d)(\d{3})($|,|\.)/g, '$1,$2$3'
if n == n2 then break else n = n2
n
答案 5 :(得分:2)
考虑一下:
function group1k(s) {
return (""+s)
.replace(/(\d+)(\d{3})(\d{3})$/ ,"$1 $2 $3" )
.replace(/(\d+)(\d{3})$/ ,"$1 $2" )
.replace(/(\d+)(\d{3})(\d{3})\./ ,"$1 $2 $3.")
.replace(/(\d+)(\d{3})\./ ,"$1 $2." )
;
}
它可以快速解决999.999.999以下的任何问题,这通常就足够了。我知道这些缺点,我并不是说这是最终的武器 - 但它和上面的其他武器一样快,我发现这个更具可读性。如果您不需要小数,则可以进一步简化:
function group1k(s) {
return (""+s)
.replace(/(\d+)(\d{3})(\d{3})$/ ,"$1 $2 $3")
.replace(/(\d+)(\d{3})$/ ,"$1 $2" )
;
}
不方便。
答案 6 :(得分:2)
我知道这是一个非常老的帖子并且有很好的答案,但是如果有人有兴趣,有一个jQuery插件,通过制作一个包括简化数字格式化(数千格式,小数位数,自定义千位分隔符等)和一个简单的电话。 有很多功能和文档就足够了。 它被称为jQuery Number。
你只需加入它:
<script type="text/javascript" src="jquery/jquery.number.min.js"></script>
然后使用它:
在自动格式化HTML输入上:$('input.number').number( true, 2 );
或
在JS电话:$.number( 5020.2364, 2 ); // Outputs: 5,020.24
希望这有助于某人。
答案 7 :(得分:1)
我在某处使用以下方法:
var value = 123456789.9876543 // i.e. some decimal number
var num2 = value.toString().split('.');
var thousands = num2[0].split('').reverse().join('').match(/.{1,3}/g).join(',');
var decimals = (num2[1]) ? '.'+num2[1] : '';
var answer = thousands.split('').reverse().join('')+decimals;
使用split-reverse-join是一种偷偷摸摸的方式,从字符串的后面到前面,以3个为一组。可能有一种更简单的方法,但它感觉很直观。
答案 8 :(得分:1)
格式化数字的最简单方法是使用java脚本函数
var numberToformat = 1000000000
//add locality here, eg: if you need English currency add 'en' and if you need Danish currency format then use 'da-DA'.
var locality = 'en-EN';
numberToformat = numberToformat.toLocaleString(locality , {
minimumFractionDigits: 4 })
document.write(numberToformat);
有关详情,请点击documentation page
答案 9 :(得分:0)
以下是工作示例:
$("#estimated-amount-due .content").html("$" + miniCartTotal.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"));
这条线就够了,对我有用。检查下面的完整代码。如果它也适合你,请告诉我。
$(".action.showcart").on('click', function() {
var miniCartTotal = $("#estimated-subtotal .price").html();
var miniCartTotalString = miniCartTotal.replace(/\$/g, '');
var miniCartTotalString = miniCartTotalString.replace(/,/g, '');
var configValue = 5;
miniCartTotal = parseFloat(miniCartTotalString) + configValue;
console.log("updated value " + miniCartTotal);
$("#estimated-amount-due .content").html("$" + miniCartTotal.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"));
});
答案 10 :(得分:0)
似乎应该将其作为已批准的答案...
Intl.NumberFormat('en-US').format(count)
请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
答案 11 :(得分:-1)
递归解决方案:
function thousands(amount) {
if( /\d{3}\d+/.test(amount) ) {
return thousands(amount.replace(/(\d{3}?)(,|$)/, ',$&'));
}
return amount;
}
另一个拆分解决方案:
function thousands (amount) {
return amount.split('').reverse().join('').replace(/\d{3}/g, '$&,').split('').reverse().join('');
}