Solidity

Web3 - 如何正確添加 WEI 和 ETH 值

  • September 27, 2021

我正在開發我的 DApp 中的拍賣功能,並且在正確地將兩個WEI值相加時遇到問題。

該合約儲存了兩個重要的值:

  1. 一個minBidIncrement變數 - 我設置為0.1 ETH2.

一個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

引用自:https://ethereum.stackexchange.com/questions/75927