【发布时间】:2022-11-01 18:43:02
【问题描述】:
我有一定数量的代币,我想在一个 web3 项目中烧掉,这个数量是 0.29806008728157019 我想把这个数量传递给 web3.utils.toBN(Math.trunc(amount * 1000000000000000000));,因为它是不变的。我不能将它作为字符串传递的问题,当我使用ParsFloat 解析它时,它变成了0.2980600872815702,这是一个问题,因为我想要完全相同的浮点数。我尝试使用toFixed(17) 和toPrecision(17),但它们将浮点数更改为字符串并出现同样的问题。
那么我如何在不改变它的情况下将它作为浮点数传递呢?
【问题讨论】:
-
你想要的根本不可能。值
0.29806008728157019无法使用 JavaScript 中的数字类型准确表示。 -
此外,
29806008728157019超过了Number.MAX_SAFE_INTEGER,因此即使您的计算结果值也无法使用数字类型准确表示。 -
谢谢您的回答 。所以我还有其他解决方案吗?
-
您不能使用数字类型,因此您必须退回到一些可以处理大量数字的库。
amount的类型是什么?如果它已经是一个数字,那么精度已经丢失。如果它是一个字符串,您很可能会使用您已经在web3.utils.toBN()中使用的 BN.js 库。我无法真正在本地对其进行测试,但我认为它会类似于web3.utils.toBN(amound).mul(web3.utils.toBN('1000000000000000000'))。这个表达式的结果已经是一个 BN 实例,所以你不需要在结果上使用web3.utils.toBN()。
标签: javascript floating-point precision web3 floating