js求取小数点后100位小数,判断是否可除尽

首先,假设是一个除不尽的小数,这样理解的话,就很简单了。

function getDecimal(a, b) {
  let list = [];
  let remainder = a % b; // 求取当前余数,比如20%3剩余数2

  while (list.length < 100) {
    let decimal = Math.floor(remainder * 10 / b); // 求取当前位小数
    list.push(decimal);
    remainder = remainder * 10 % b; // 求取下一位余数
  }

  return list.join('');
}

 

判断是否能除尽,其实只要判断余数中是否会出现重复数字即可,如果出现重复数字,说明陷入了某种循环里,并不能除尽。

function isDivisible(a, b) {
  let list = [];
  let isDivide = [];
  let flag = true;
  let result = true;
  let remainder = a % b;

  while (flag) {
    let decimal = Math.floor(remainder * 10 / b);
    if (remainder === 0) {
      // 能除尽
      flag = false;
    } else if (isDivide.includes(remainder)) {
      // 不能除尽
      flag = false;
      result = false;
    } else {
      isDivide.push(remainder);
    }
    list.push(decimal);
    remainder = remainder * 10 % b;
  }

  // 返回结果和余数
  return [result, list];
}

 

posted on 2020-05-02 21:25  StephenWong  阅读(557)  评论(0编辑  收藏  举报