首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web3 -如何正确地添加WEI和ETH值

Web3 -如何正确地添加WEI和ETH值
EN

Ethereum用户
提问于 2019-09-14 01:57:38
回答 2查看 1.9K关注 0票数 0

我正在研究我的DApp中的拍卖功能,并且在正确地将两个WEI值相加时遇到了问题。

合同包含两个重要的价值:

  1. 一个minBidIncrement变量--我将其设置为0.1 ETH,并且

  1. 一个highestBidAmount变量--它存储了迄今为止最高的出价。

因此,如果最后一个最高出价是2.5 ETH,我想确保下一个允许的出价至少是加上minBidIncrement,这意味着它应该是:

2.5 ETH + 0.1 ETH,等于2.6 ETH

很直接的东西。

所以我要这么做:

代码语言:javascript
复制
    let minNextBid = highestBidAmount + minBidIncrement;

但我从中得到的是一些疯狂的巨大价值,这使我的Dapp抓狂,Metamask给了我错误。

下面是引擎盖下面发生的事情:

-highestBidAmount100000000000000000的身份回来

-minBidIncrement也以100000000000000000的身份回来

(这两位都很好,因为他们是小数点18位,这意味着他们真的是0.1 ETH)

接下来,当我设置我的minNextBid时,我基本上是在做100000000000000000 + 100000000000000000,但是这会产生:100000000000000000100000000000000000

然后,当我将其转换为ETH时,我得到了以下值:100000000000000000.1

这完全不是我想要的。我本来希望得到的是0.2 ETH,但我得到的却是天文数字。

这是怎么回事?我做错了什么?怎么做才是对的?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2019-09-14 08:18:32

您正在JavaScript中连接字符串。

下面是发生的情况:

代码语言:javascript
复制
var test = "he";
var test2 = "llo";
console.log(test+test2);

输出:hello。您正在使用整数作为字符串。

因此,在添加变量之前,需要将变量转换为int。

下面是一个示例:

代码语言:javascript
复制
highestBidAmount = parseInt(highestBidAmount, 10);

Sidenote:不要更改与小数位无关的10位。是用的基数。

这两个变量都可以这样做:

代码语言:javascript
复制
minBidIncrement = parseInt(minBidIncrement, 10);

现在加上它们:

代码语言:javascript
复制
let minNextBid = highestBidAmount + minBidIncrement;

现在,您正在添加整数,因此它将生成:200000000000000000

票数 5
EN

Ethereum用户

发布于 2021-09-27 15:58:10

看着文档,上面写着

代码语言:javascript
复制
Returns:
String|BN: If a string is given it returns a number string, otherwise a BN.js instance.

这意味着,如果您使用字符串实例化了wei值,如下所示:

代码语言:javascript
复制
const amount= web3.utils.toWei("1000","ether")

它将返回一个字符串值。现在,如果您尝试将两个字符串添加到一起,正如另一篇文章所提到的,它将将它们连接起来。使用您要做的事情,我认为您希望使用一个BigNumber实例化它们,以便它返回一个BigNumber。就像这样:

代码语言:javascript
复制
const amount = web3.utils.toBN("1000");
const amountInWei= web3.utils.toWei(amount ,"ether");

然后,您可以使用BN方法修改这些值。您只需要根据您想要做的事情添加.add .sub .mul.div

代码语言:javascript
复制
const amountToAdd = web3.utils.toBN("500");
const newAmountInWei = amountInWei.add(amountToAdd);

如果要可视化该值,只需将.toString()添加到BigNumber值中,将其串成字符串即可。

代码语言:javascript
复制
const stringifiedNewAmountInWei = newAmountInWei.toString();
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/75927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档