如何在 JavaScript 中在 BigInt 上使用 Math.floor?

问题描述

收到此错误 TypeError: Cannot convert a BigInt value to a number

function getCompositeNumbers() {
  let v = []
  let i = 1n

  while (i < 1000000n) {
    if (checkIfDivisible(i)) {
      v.push(i)
    }
    i++
  }

  return v
}

function checkIfDivisible(i) {
  if (i/2n == Math.floor(i/2n)) return true
  if (i/3n == Math.floor(i/3n)) return true
  if (i/5n == Math.floor(i/5n)) return true
  if (i/7n == Math.floor(i/7n)) return true
  if (i/11n == Math.floor(i/11n)) return true
  if (i/13n == Math.floor(i/13n)) return true
  return false
}

解决方法

BigInts 是整数,它们不能表示小数值 - 对它们进行四舍五入是没有意义的。 / 是整数除法,隐式截断十进制数字。

要检查 BigInts 的可分性,请使用

number / divisor * divisor == number
number % divisor == 0n