首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得Javascript BigInt除法的有效位和指数结果

问如何获得Javascript BigInt除法的有效位和指数结果
EN

Stack Overflow用户
提问于 2018-08-08 18:57:11
回答 1查看 162关注 0票数 5

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

代码语言:javascript
复制
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
    }

因此,f(1n,3n,3)结果为'333e-3'

还能更好吗?此代码不四舍五入。对于零和负数,它也不能很好地工作。

EN

回答 1

Stack Overflow用户

发布于 2021-09-08 22:03:21

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

在这里试试吧

​

代码语言:javascript
复制
// 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) );
代码语言:javascript
复制
<script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>

​

负数

​

代码语言:javascript
复制
// 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) );
代码语言:javascript
复制
 <script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51744959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档