我有一个输入字段,用户可以使用点或逗号输入十进制数字(例如:79,99或79.99)。当用户使用逗号输入数字时,我将其替换为点(此数字随后会发送到远程服务器进行验证)。现在我想在用户使用toFixed(2)函数在页脚中输入数字后显示数字,只显示前两个十进制数字。我无法使它工作,因为在使用ParseFloat将其转换回数字之后,逗号消失后的2位小数。
示例:
用户输入输入字段:79,99,然后将其设置为变量totalAmount:
$('#amount-1').keyup(function() {
getRefundAmount(1); // This function calls the calcTotalAmount function
})
function calcTotalAmount() {
console.log('calcTotalAmount');
var totalAmount = 0;
var totalRefund = 0;
var rowAmount = 0;
var rowRefund = 0;
for(var i = 1; i < 4; i++ ) {
rowAmount = parseFloat($('#amount-' + i).val());
rowRefund = parseFloat($('#result-' + i).text());
if(!isNaN(rowAmount)) {
totalAmount += rowAmount;
totalRefund += rowRefund;
}
}
var toPay = totalAmount-totalRefund;
totalAmount = totalAmount.toString().replace(/\,/g, '.');
totalAmount = parseFloat(totalAmount).toFixed(2);
$('#footer-refund').text(totalRefund)
$('#footer-total').text(totalAmount)
if (totalAmount == '') {
$('#footer-total').text("0.00");
}
}
页脚中显示的结果为:79.00而不是79.99
答案 0 :(得分:0)
我在jsfiddle中尝试了你的代码并在“.toFixed(2)”上出错了 更改它后,我可以防止错误。:
$(function() {
var totalAmount = '79,99';
totalAmount = parseFloat( totalAmount.toString().replace(/\,/g, '.'));
totalAmount = totalAmount.toFixed(2);
$('#footer-refund').text(totalAmount)
});
答案 1 :(得分:0)
看起来您提供的代码效果很好但是您可以应用一些修复:
totalAmount = ("" + totalAmount).replace(/\,/g,'.');
totalAmount = parseFloat(totalAmount);
//use toFixed only if you don't restrict input to 2 decimals, but I'd recommend restricting input otherwise you'll encounter rounding issues
顺便说一句,你做$('#footer-refund').text(totalRefund.toFixed(2))
,不应该是$("#footer-refund").text(totalAmount)
(不知道为什么你也在这里使用固定)?
答案 2 :(得分:0)
感谢您的帮助:
解决方案如下:我必须在for循环中检查它并在那里替换它。
for(var i = 1; i < 4; i++ ) {
if(!$('#amount-' + i).val()){continue;}else{
rowAmount = parseFloat($('#amount-' + i).val().toString().replace(/\,/g,'.'));
rowRefund = parseFloat($('#result-' + i).text());
if(!isNaN(rowAmount)) {
totalAmount += rowAmount;
totalRefund += rowRefund;
}
}
}