我在使用此代码时遇到了一些问题。我正在使用的在线小程序告诉我,当它预期为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;
}
}
答案 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;
}