Web3js

Web3 和 Javascript 的 WEI 到 ETHER 轉換問題

  • August 26, 2018

所以我有一個表格,使用者可以在其中輸入 ETHER 中商品的價格。我知道區塊鏈目前不處理浮點數,所以我正在嘗試轉換為 WEI 並以這種方式將其儲存在區塊鏈上。

我在做什麼如下

const price =.34 //this should be ether
const weiPrice = web3.toWei(cleanPrice, 'ether');
console.log('weiPrice', weiPrice);

輸出是 weiPrice 340000000000000000,這是正確的。然後我將變數 weiPrice 傳遞給 truffle-contract 承諾以創建一個新項目。

  return contractInstance.createItem(
       Number(weiPrice),
       Number(cleanQuantity),
       Number(cleanQuantity), {
         from: account,
       })

一切似乎都有效,但是當我從區塊鏈中檢索該項目的值時,我得到以下結果。

檢索到的項目

BigNumber {s: 1, e: 17, c: Array(1)}
c: [3400]
e: 17
s: 1__proto__: Object

我需要將價格轉換回乙太或 wei,但我想我只是不明白這裡發生了什麼。誰能幫我理解?

我嘗試了前幾條評論中的建議,結果如下。

console.log('test', item[0].c.valueOf());

輸出

test [3400]
0: 3400
length: 1
__proto__: Array(0)


console.log('test2', item[0].c.toNumber());

輸出

Uncaught (in promise) TypeError: item[0].c.toNumber is not a function

Web3.js 使用 BigNumber 庫,因為 JavaScript不能很好地正確處理大數

查看以下範例,了解如何恢復預期值:

var val;
web3.eth.getBalance('0x90b0137bf6ddb130ed8e3f28cc9f929b0b609ed2', function (error, wei) { if (!error) { val = wei } })
val
> Object { s: 1, e: 17, c: (2) […] }
val.valueOf()
> "288295053265996304"
val.toNumber()
> 288295053265996300
val.toString()
> "288295053265996304"

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