简体   繁体   English

如何在不使用模数的情况下在javascript中获得余数

[英]How to get remainder in javascript without using modulus

I'm having some issues with this code. 我在这段代码中遇到了一些问题。 The online applet I'm using is telling me that when it's expecting 1, it's actually getting -2 and it's saying I'm wrong. 我正在使用的在线applet告诉我,当它期望为1时,实际上是-2,这表示我错了。 To me the code looks correct. 对我来说,代码看起来正确。 Does anyone see something wrong here? 有人在这里看到问题吗?

This is what I have so far: 这是我到目前为止的内容:

function modulo(num1, num2) {
  if(isNaN(num1) || isNaN(num2)){
      return NaN;
  }
  if(num1 === 0){
      return 0;
  }
  if(num2 === 0){
      return NaN;
  }

  var quot = num1 - Math.floor(num1/num2)*num2;

  if(num1 < 0){
      return -(quot);
  }
  else{
      return quot;
  }
}

You need to use Math.abs at some point: 您需要在某些时候使用Math.abs

function modulo(num1, num2) {
     if(isNaN(num1) || isNaN(num2)){
                              return NaN;
                            }
     if(num1 === 0){
            return 0;
            }
     if(num2 === 0){
            return NaN;
     }


       var newNum1 = Math.abs(num1);
       var newNum2 = Math.abs(num2);

       var quot = newNum1 - Math.floor( newNum1 / newNum2 ) * newNum2 ;

       if(num1 < 0){
             return -(quot);
       }
       else{
             return quot;
       }
  }

Edit : Fixed some things 编辑 :修复了一些问题

 function divide() { var number = Number(document.getElementById('number').value); var divide = Number(document.getElementById('divide').value); var number2 = Number(Math.floor(number/divide)); var remainder = Number(number - (number2 * divide)); var result = remainder; document.getElementById('quotient').innerHTML = "Quotient : " + number2; document.getElementById('result').innerHTML = "Remainder : " + result; } 
 <label>Number: </label><input type="number" id="number"> <label>Divisor: </label><input type="number" id="divide"> <div id="quotient">Quotient: </div> <div id="result">Remainder: </div> <button onclick="divide()">Divide</button> 

The issue was with your return statement. 问题出在您的退货单上。 It should have been return quot - num2 when num1 is less than 0. num1小于0时,应该return quot - num2

I made it work and passes the several tests in the JSBin: http://jsbin.com/rufumi/3/edit?js,console 我成功了,并通过了JSBin中的多项测试: http ://jsbin.com/rufumi/3/edit?js,console

Cheers 干杯

I think this code is compliant with ECMAScript's definition of the modulus operator . 我认为这段代码符合ECMAScript对模运算符的定义。

function modulo(num1, num2) {
  num1 = +num1;
  num2 = +num2;
  if (!num2 || !Number.isFinite(num1)) return NaN;
  if (!num1 || !Number.isFinite(num2)) return num1;
  return num1 - Math.trunc(num1/num2)*num2;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM