Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript的乘法错误_Javascript_Jquery - Fatal编程技术网

Javascript的乘法错误

Javascript的乘法错误,javascript,jquery,Javascript,Jquery,我在网站上找到了一个JS脚本 一旦我实现了它,乘法就不正确了。以下是我正在处理的页面: 如果您将第二项的数量记为“15”,则总数为38.849999美元,而不是38.85美元。为什么?我如何解决这个问题 这就是我认为正在进行乘法运算的函数: function calcTotalPallets() { var totalPallets = 0; $(".num-pallets-input").each(function() { var thisValue = parseFloat($

我在网站上找到了一个JS脚本

一旦我实现了它,乘法就不正确了。以下是我正在处理的页面:

如果您将第二项的数量记为“15”,则总数为38.849999美元,而不是38.85美元。为什么?我如何解决这个问题

这就是我认为正在进行乘法运算的函数:

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。我将尝试解决方法:)