emmet.sdk
Version:
Emmet.Bridge SDK library
59 lines • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bigIntToHuman = void 0;
const formatFractionalPart_1 = require("./formatFractionalPart");
const verifiers_1 = require("../verifiers");
const zerroPadding_1 = require("./zerroPadding");
const hexToDecimalString_1 = require("./hexToDecimalString");
function bigIntToHuman(n, decimals = 18n) {
if (n && decimals) {
let cleaned;
let whole, fraction;
let divider = typeof decimals === 'string'
? 10n ** BigInt(parseInt(decimals))
: 10n ** BigInt(decimals);
switch (typeof n) {
case 'string':
if ((0, verifiers_1.isHexString)(n)) {
cleaned = (0, hexToDecimalString_1.hexToDecimalString)(n);
}
else {
cleaned = n.replace(/[^0-9.]/g, '');
}
[whole, fraction] = cleaned.split('.');
if (!fraction) {
fraction = '';
const intger = BigInt(whole + fraction) / divider;
fraction = BigInt(whole + fraction) % divider;
whole = intger;
}
break;
case 'number':
whole = parseInt(n.toString());
fraction = (parseFloat(n.toString()) - whole)
.toString()
.split('.')[1];
fraction = parseInt(fraction) > 0 ? parseInt(fraction) : 0;
break;
case 'bigint':
whole = BigInt(n) / divider;
fraction = BigInt(n) % divider;
break;
}
if (fraction) {
let formattedFractionalPart = (0, formatFractionalPart_1.formatFractionalPart)((0, zerroPadding_1.zerroPadding)(fraction, decimals, 8));
if (formattedFractionalPart.length > 8) {
formattedFractionalPart = formattedFractionalPart.slice(0, 8);
}
return `${whole.toLocaleString()}.${formattedFractionalPart}`;
}
else {
return whole ? whole.toLocaleString() : '0.00';
}
}
else {
return '0.00';
}
}
exports.bigIntToHuman = bigIntToHuman;
//# sourceMappingURL=bigIntToHuman.js.map