在JavaScript中,我如何得到:

一个给定整数除另一个整数的整数倍是多少? 其余的呢?


当前回答

ES6引入了新的数学。trunc方法。这允许修复@MarkElliot的答案,使其适用于负数:

var div = Math.trunc(y/x);
var rem = y % x;

注意,Math方法与位运算符相比有一个优势,那就是它们处理大于231的数字。

其他回答

 function integerDivison(dividend, divisor){
    
        this.Division  = dividend/divisor;
        this.Quotient = Math.floor(dividend/divisor);
         this.Remainder = dividend%divisor;
        this.calculate = ()=>{
            return {Value:this.Division,Quotient:this.Quotient,Remainder:this.Remainder};
        }
         
    }

  var divide = new integerDivison(5,2);
  console.log(divide.Quotient)      //to get Quotient of two value 
  console.log(divide.division)     //to get Floating division of two value 
  console.log(divide.Remainder)     //to get Remainder of two value 
  console.log(divide.calculate())   //to get object containing all the values

floor(operation)返回操作的四舍五入值。

第一个问题的例子:

Const x = 5; Const y = 10.4; const z =数学。地板(x + y); console.log (z);

第二个问题的例子:

Const x = 14; Const y = 5; const z =数学。地板(x % y); console.log (x);

如果你需要计算非常大的整数的余数,而JS运行时不能这样表示(任何大于2^32的整数都表示为浮点数,所以它失去了精度),你需要做一些技巧。

这对于检查我们日常生活中许多情况下的支票数字(银行账号、信用卡等)尤为重要。

首先,你需要你的数字作为一个字符串(否则你已经失去了精度,余数没有意义)。

str = '123456789123456789123456789'

现在需要将字符串分割成更小的部分,足够小,以便任何余数和一段字符串的连接可以容纳9位数字。

digits = 9 - String(divisor).length

准备一个正则表达式来分割字符串

splitter = new RegExp(`.{1,${digits}}(?=(.{${digits}})+$)`, 'g')

例如,如果digits为7,则regexp为

/.{1,7}(?=(.{7})+$)/g

它匹配最大长度为7的非空子字符串,后面跟着((?=…)是正前向)若干个字符,该字符是7的倍数。“g”是让表达式遍历所有字符串,而不是在第一次匹配时停止。

现在将每个部分转换为整数,并通过reduce计算余数(将之前的余数加回去-或0 -乘以正确的10次方):

reducer = (rem, piece) => (rem * Math.pow(10, digits) + piece) % divisor

这是可行的,因为“减法”余数算法:

n mod d = (n - kd) mod d

它允许用余数替换十进制表示的任何“初始部分”,而不影响最后的余数。

最终代码看起来像这样:

function remainder(num, div) {
  const digits = 9 - String(div).length;
  const splitter = new RegExp(`.{1,${digits}}(?=(.{${digits}})+$)`, 'g');
  const mult = Math.pow(10, digits);
  const reducer = (rem, piece) => (rem * mult + piece) % div;

  return str.match(splitter).map(Number).reduce(reducer, 0);
}

你也可以使用三元来决定如何处理正整数值和负整数值。

var myInt = (y > 0) ? Math.floor(y/x) : Math.floor(y/x) + 1

如果这个数字是正数,就没有问题。如果这个数字是负数,它会加1,因为数学。地板处理否定。

计算页数可以一步完成: Math.ceil (x / y)