我有以下函数,它总计了三个字段值:
function calculatePublicTransportTotalClaim(){
var Bus_Weekly_Claim = formatNum( $('#Bus_Weekly_Claim').val() );
var Train_Weekly_Claim = formatNum( $('#Train_Weekly_Claim').val() );
var Tram_Weekly_Claim = formatNum( $('#Tram_Weekly_Claim').val() );
var Total = Bus_Weekly_Claim + Train_Weekly_Claim + Tram_Weekly_Claim;
console.log( Total )
$('#PublicTransport_Weekly_Claim').val( Total );
}
输入的默认值为0.00
他们使用ints
将其值转换为formatNum
,如下所示:
function formatNum(n) {
var round = Math.round;
n = round(n);
return n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
}
但是,当我调用函数calculatePublicTransportTotalClaim
时,返回的Total
为:0.000.000.00
我做错了什么?因为值现在应该是数字,但是当我将它们加在一起时,它们似乎就像字符串一样。
答案 0 :(得分:4)
toFixed
返回一个字符串,并在一起添加字符串。
当你用添加逗号替换句号时,你必须在数字加起来之后这样做,所以formatNum
函数不是&# 39;真的很有用,只需这样做
function calculatePublicTransportTotalClaim(){
var Bus_Weekly_Claim = Math.round( $('#Bus_Weekly_Claim').val() );
var Train_Weekly_Claim = Math.round( $('#Train_Weekly_Claim').val() );
var Tram_Weekly_Claim = Math.round( $('#Tram_Weekly_Claim').val() );
var Total = Bus_Weekly_Claim + Train_Weekly_Claim + Tram_Weekly_Claim;
var parsedTotal = Total.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
$('#PublicTransport_Weekly_Claim').val( parsedTotal );
}
答案 1 :(得分:1)
toFixed()
会返回字符串
您正在连接而不是添加。
强制它通过添加+
来返回一个数字,
例如
return +(n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"));
答案 2 :(得分:1)
将数字添加到一起后格式化数字。使用parseFloat()确保它们被解释为十进制数值。
total = parseFloat(val1) + parseFloat(val2) + parseFloat(val3)
然后格式化总数,parseFloat()是JavaScript等同于parseInt()但是对于十进制值
注意:使用parseFloat时,数字中不能有逗号。始终只在添加值后添加格式。