Web3 - 如何正確添加 WEI 和 ETH 值
我正在開發我的 DApp 中的拍賣功能,並且在正確地將兩個
WEI
值相加時遇到問題。該合約儲存了兩個重要的值:
- 一個
minBidIncrement
變數 - 我設置為0.1 ETH
2.一個
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
)所以接下來當我設置 my 時
minNextBid
,我基本上是在做100000000000000000
+100000000000000000
,但這會產生:100000000000000000100000000000000000
然後當我將其轉換為 ETH 時,我得到了這個值:
100000000000000000.1
這根本不是我所期望的。我期望得到的是
0.2 ETH
,但我卻得到了那個天文數字。那麼這裡發生了什麼?我究竟做錯了什麼?這樣做的正確方法是什麼?
您在 JavaScript 中連接字元串。
這是發生的事情:
var test = "he"; var test2 = "llo"; console.log(test+test2);
輸出:
hello
。您正在使用整數作為字元串。因此,您需要在添加變數之前將它們轉換為 int。
這是一個例子:
highestBidAmount = parseInt(highestBidAmount, 10);
旁注:不要更改與小數位無關的 10。這是使用的基數。
對這兩個變數執行此操作:
minBidIncrement = parseInt(minBidIncrement, 10);
現在添加它們:
let minNextBid = highestBidAmount + minBidIncrement;
現在您正在添加整數,因此它會導致:
200000000000000000