我想将两个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
}因此,f(1n,3n,3)结果为'333e-3'
还能更好吗?此代码不四舍五入。对于零和负数,它也不能很好地工作。
发布于 2021-09-08 22:03:21
您可以使用Basenumber.js在两个BigIntegers之间进行除法,然后用具有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) );<script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>
负数
// 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) ); <script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>
https://stackoverflow.com/questions/51744959
复制相似问题