javascript bigint 转换

问题描述

为了表示余额为 u128,我们假设最小的小数是 15。即最小的单位是 1e-15。现在,我需要以下功能

(1) 在浮点数和大数整数之间进行转换,例如0.001$ 是 0.001*1e15=1e12 作为 bignumber 整数。

(2) 将余额转换为字节数组,大端或小端,以便我可以在上面签名。

我之前使用的库是“bn.js”。它支持 (2),但是,如果我想使用以下方法将 1000$ 转换为 bigint:

let amt = new BN(1e18,10)

我会报错,因为bn.js要求数字小于2^53,但1e18>2^53。这与大数不符!这是此限制的链接https://github.com/indutny/bn.js/blob/master/lib/bn.js#L128

我检查了一些其他库,例如 bignumber.js,但它们不支持 (2)。

解决方法

查看此 GitHub 存储库:https://github.com/peterolson/BigInteger.js/

let amt = bigInt("1e18");

或者您可以使用不同的基础:

let largeHexValue = bigInt("FFFFF",16)