in runtime/shared/intlNumUtils.js [244:274]
function formatNumberWithLimitedSigFig(
value: number,
decimals: ?number,
numSigFigs: number,
): string {
// First make the number sufficiently integer-like.
const power = _getNumberOfPowersOfTen(value);
let inflatedValue = value;
if (power < numSigFigs) {
inflatedValue = value * Math.pow(10, -power + numSigFigs);
}
// Now that we have a large enough integer, round to cut off some digits.
const roundTo = Math.pow(
10,
_getNumberOfPowersOfTen(inflatedValue) - numSigFigs + 1,
);
let truncatedValue = Math.round(inflatedValue / roundTo) * roundTo;
// Bring it back to whatever the number's magnitude was before.
if (power < numSigFigs) {
truncatedValue /= Math.pow(10, -power + numSigFigs);
// Determine number of decimals based on sig figs
if (decimals == null) {
return formatNumberWithThousandDelimiters(
truncatedValue,
numSigFigs - power - 1,
);
}
}
// Decimals
return formatNumberWithThousandDelimiters(truncatedValue, decimals);
}