Files
NapCatQQ/.pnpm-store/v3/files/fb/af1729287fcd1bc37b4f5e2e71d409ded6c99e412776862aac62c316607036418ffaf5ab79471bb8b4c16d751a029c6ee909579696892058ebf5a954fde249
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

35 lines
1.3 KiB
Plaintext

import Decimal from 'decimal.js';
import { ComputeExponentForMagnitude } from './ComputeExponentForMagnitude';
import { FormatNumericToString } from './FormatNumericToString';
/**
* The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x
* according to the number formatting settings. It handles cases such as 999 rounding up to 1000,
* requiring a different exponent.
*
* NOT IN SPEC: it returns [exponent, magnitude].
*/
export function ComputeExponent(internalSlots, x) {
if (x.isZero()) {
return [0, 0];
}
if (x.isNegative()) {
x = x.negated();
}
var magnitude = x.log(10).floor();
var exponent = ComputeExponentForMagnitude(internalSlots, magnitude);
// Preserve more precision by doing multiplication when exponent is negative.
x = x.times(Decimal.pow(10, -exponent));
var formatNumberResult = FormatNumericToString(internalSlots, x);
if (formatNumberResult.roundedNumber.isZero()) {
return [exponent, magnitude.toNumber()];
}
var newMagnitude = formatNumberResult.roundedNumber.log(10).floor();
if (newMagnitude.eq(magnitude.minus(exponent))) {
return [exponent, magnitude.toNumber()];
}
return [
ComputeExponentForMagnitude(internalSlots, magnitude.plus(1)),
magnitude.plus(1).toNumber(),
];
}