Javascript的乘法错误
我在网站上找到了一个JS脚本 一旦我实现了它,乘法就不正确了。以下是我正在处理的页面: 如果您将第二项的数量记为“15”,则总数为38.849999美元,而不是38.85美元。为什么?我如何解决这个问题 这就是我认为正在进行乘法运算的函数:Javascript的乘法错误,javascript,jquery,Javascript,Jquery,我在网站上找到了一个JS脚本 一旦我实现了它,乘法就不正确了。以下是我正在处理的页面: 如果您将第二项的数量记为“15”,则总数为38.849999美元,而不是38.85美元。为什么?我如何解决这个问题 这就是我认为正在进行乘法运算的函数: function calcTotalPallets() { var totalPallets = 0; $(".num-pallets-input").each(function() { var thisValue = parseFloat($
function calcTotalPallets() {
var totalPallets = 0;
$(".num-pallets-input").each(function() {
var thisValue = parseFloat($(this).val());
if ( (IsNumeric(thisValue)) && (thisValue != '') ) {
totalPallets += parseInt(thisValue);
};
});
$("#total-pallets-input").val(totalPallets).toFixed(2);
}
我的全部代码可以在
提前非常感谢你打电话给toFixed的事不对。应该是:
var rowTotal = (numPallets * multiplier).toFixed(2); //it was missing the .toFixed(2)
$(“#总托盘输入”).val(totalPallets.toFixed(2))代码>如果您对使用货币感兴趣,正如在评论中所说的,建议您将整数和美分计算为整数,以避免浮点的精度错误。这方面的一个简单示例是简单地将整体和美分分开,并使用一种方法为您进行计算:
var Money = (function(){
function Money(qty) {
this.whole = 0;
this.cents = 0;
this.add(qty);
}
Money.prototype.calc = function() {
while (this.cents > 100) {
this.cents -= 100;
this.whole += 1;
}
return this;
};
Money.prototype.add = function(qty) {
var parts = qty.split('.');
this.whole += Number(parts[0]);
this.cents += Number(parts[1]);
return this.calc();
};
Money.prototype.toString = function() {
return this.whole +'.'+ this.cents;
};
return Money;
}());
var m = new Money('90.75').add('50.43');
console.log(m); //=> {whole: 141, cents: 18}
console.log(m.toString()); //=> "141.18"
我真的很想检查并清理所有的代码。。。但没时间了,所以你的问题就在你的小提琴第192行。应该是:
var rowTotal = (numPallets * multiplier).toFixed(2); //it was missing the .toFixed(2)
一个很好的解决方法是在计算时以美分计算,在向用户显示时以100除。这不完全是你问题的“解决方案”,但更多的建议是避免类似的头痛。你至少能让你的小提琴工作起来,这样它就能复制你的问题吗?一个好的解决方案是有一个带有整
和分
的对象,以及一个接受字符串并对整数进行必要计算的方法,然后,toString
为您提供了它的表示形式,即整.cents
@MikeSmithDev done@谢谢你的评论。不幸的是,我的Javascript背景有限,所以我不完全确定如何做到这一点。感谢您指出这个错误。不幸的是,这并没有解决问题:(非常感谢您的回答,@elclanrs。我对Javascript非常陌生,所以如果您不介意回答后续问题,那就太好了。我如何在现有代码中实现这一点?再次感谢!JSFIDLE今天不想为我加载……但您需要做的就是创建一个Money
的新实例并执行广告。)使用add
方法添加附加项,并使用toString
打印结果。您不用浮点数,而是使用字符串。谢谢您的帮助,elclanrs。我将尝试解决方法:)