我正在研究我的DApp中的拍卖功能,并且在正确地将两个WEI值相加时遇到了问题。
合同包含两个重要的价值:
minBidIncrement变量--我将其设置为0.1 ETH,并且highestBidAmount变量--它存储了迄今为止最高的出价。因此,如果最后一个最高出价是2.5 ETH,我想确保下一个允许的出价至少是加上minBidIncrement,这意味着它应该是:
2.5 ETH + 0.1 ETH,等于2.6 ETH。
很直接的东西。
所以我要这么做:
let minNextBid = highestBidAmount + minBidIncrement;但我从中得到的是一些疯狂的巨大价值,这使我的Dapp抓狂,Metamask给了我错误。
下面是引擎盖下面发生的事情:
-highestBidAmount以100000000000000000的身份回来
-minBidIncrement也以100000000000000000的身份回来
(这两位都很好,因为他们是小数点18位,这意味着他们真的是0.1 ETH)
接下来,当我设置我的minNextBid时,我基本上是在做100000000000000000 + 100000000000000000,但是这会产生:100000000000000000100000000000000000
然后,当我将其转换为ETH时,我得到了以下值:100000000000000000.1
这完全不是我想要的。我本来希望得到的是0.2 ETH,但我得到的却是天文数字。
这是怎么回事?我做错了什么?怎么做才是对的?
发布于 2019-09-14 08:18:32
您正在JavaScript中连接字符串。
下面是发生的情况:
var test = "he";
var test2 = "llo";
console.log(test+test2);输出:hello。您正在使用整数作为字符串。
因此,在添加变量之前,需要将变量转换为int。
下面是一个示例:
highestBidAmount = parseInt(highestBidAmount, 10);Sidenote:不要更改与小数位无关的10位。是用的基数。
这两个变量都可以这样做:
minBidIncrement = parseInt(minBidIncrement, 10);现在加上它们:
let minNextBid = highestBidAmount + minBidIncrement;现在,您正在添加整数,因此它将生成:200000000000000000
发布于 2021-09-27 15:58:10
看着文档,上面写着
Returns:
String|BN: If a string is given it returns a number string, otherwise a BN.js instance.这意味着,如果您使用字符串实例化了wei值,如下所示:
const amount= web3.utils.toWei("1000","ether")它将返回一个字符串值。现在,如果您尝试将两个字符串添加到一起,正如另一篇文章所提到的,它将将它们连接起来。使用您要做的事情,我认为您希望使用一个BigNumber实例化它们,以便它返回一个BigNumber。就像这样:
const amount = web3.utils.toBN("1000");
const amountInWei= web3.utils.toWei(amount ,"ether");然后,您可以使用BN方法修改这些值。您只需要根据您想要做的事情添加.add .sub .mul或.div。
const amountToAdd = web3.utils.toBN("500");
const newAmountInWei = amountInWei.add(amountToAdd);如果要可视化该值,只需将.toString()添加到BigNumber值中,将其串成字符串即可。
const stringifiedNewAmountInWei = newAmountInWei.toString();https://ethereum.stackexchange.com/questions/75927
复制相似问题