如何获取 Javascript BigInt 除法的有效数和指数结果

Mar*_*Wit 5 javascript bigint

我想将两个 BigInt 数字相除并得到一些有效数字和指数的结果。到目前为止我已经得到了这个:

f = (numerator, denominator, significantsLength) => {
      const denominatorLength = ('' + denominator).length
      const extension = significantsLength + denominatorLength
      const extendedNumerator = numerator * 10n ** BigInt(extension)
      const div = extendedNumerator / denominator
      const divLength = ('' + div).length
      const digitsSurplus = divLength - significantsLength
      const significants = div / 10n ** BigInt(digitsSurplus)
      const exponent = digitsSurplus - extension
      return significants + 'e' + exponent
    }
Run Code Online (Sandbox Code Playgroud)

所以f(1n,3n,3)结果是'333e-3'

还能更好吗?此代码不进行四舍五入。它也不适用于零和负数。

Ale*_*Sp3 0

您可以使用Basenumber.js在两个 BigInteger 之间进行除法,然后用带有n有效数字的指数表示它:

在这里尝试一下

// Number of decimals needed
Base.setDecimals(100);

let x = Base('555555555555555555555555555555555555555555555555555');
let y = Base('999999999999999999999999999999999999999999999999');

let z = x.divide(y);

console.log( z.toString() );
console.log( z.toExponential(4) );
Run Code Online (Sandbox Code Playgroud)
<script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>
Run Code Online (Sandbox Code Playgroud)

负数

// Number of decimals needed
Base.setDecimals(100);

let x = Base('-1e+1000');
let y = Base(9);

let z = x.divide(y);

console.log( z.toString() );
console.log( z.toExponential(10) );
Run Code Online (Sandbox Code Playgroud)
 <script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>
Run Code Online (Sandbox Code Playgroud)