如何在不使用模数

时间:2017-01-17 02:59:17

标签: javascript

我在使用此代码时遇到了一些问题。我正在使用的在线小程序告诉我,当它预期为1时,它实际上是-2并且它说我错了。对我来说代码看起来是正确的。有没有人在这里看错了?

这是我到目前为止所做的:

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;
  }
}

4 个答案:

答案 0 :(得分:2)

您需要在某个时候使用 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;
       }
  }

答案 1 :(得分:0)

修改:修正了一些事情

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>

答案 2 :(得分:0)

问题在于你的退货声明。当return quot - num2小于0时,它应该是num1

我使它工作并传递了JSBin中的几个测试:http://jsbin.com/rufumi/3/edit?js,console

干杯

答案 3 :(得分:0)

我认为此代码符合ECMAScript对modulus operator的定义。

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;
}