Web3js
Web3 和 Javascript 的 WEI 到 ETHER 轉換問題
所以我有一個表格,使用者可以在其中輸入 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"