Cómo convertir el valor de transacción ETH ethereum a decimal en javascript

Valor de ejemplo:0x2c1c986f1c48000

de: aquí

Valor esperado de vuelta: 0.19866144Eth

Respuestas (3)

Los números de punto fijo de Ether tienen una mayor precisión que los flotantes de JavaScript, por lo que deberá usar una biblioteca que admita esos valores más grandes.

En Web3 puedes simplemente hacer:

let bigNumber = web3.toBigNumber('0xFFFFFF')
web3.fromWei(bigNumber)
se me ocurre: parseInt(0x2c1c986f1c48000, 16) / Math.pow(10, 18) enlace

Prueba esto con ethers.js utils :

ethers.utils.formatEther('1000000000000000000') // return 1.0

Puedes usar la biblioteca BigNumber :

var value_wei = "0x2c1c986f1c48000";
var value_ether = new BigNumber(value_wei).dividedBy(new BigNumber("1000000000000000000");

Para explicar: Ethereum funciona con unidades de wei. 1 ether es 1e18 wei, por lo que debe tratar números que son demasiado grandes para ser manejados por javascript. La biblioteca BigNumber acepta la representación de números en cadenas, por lo que puede solucionar este problema.

Tenga en cuenta que todas las funciones en web3.js siempre devuelven valores en wei como un objeto BigNumber, por lo que el retorno de web3.eth.getBalance(...) puede usarse directamente con las líneas anteriores, por ejemplo.