[英]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.