¿Por qué lo siguiente devuelve un error de componente fraccionario por exceder decimales? Solo parece activarse con un saldo bajo.
Si mi saldo es 0.1 ether o BNB, no veo un error, pero si mi saldo es 0.0001, vería este error.
Error: componente fraccionario excede decimales
var account = accounts[0] var yourBalance = await provider.getBalance(account) var fixedBalance= ethers.FixedNumber.fromValue(yourbalance , 18); var stakedAmount = (fixedBalance * 0.50).toString(); var finalOutput = ethers.utils.parseUnits(stakedAmount , 18); //this returns Error: fractional component exceeds decimalsUtilizar toFixed(n)
var stakedAmount = (fixedBalance * 0.50).toFixed(6) ;
n se define como la cantidad máxima de precisión que necesita en sus lugares decimales.
Elegí 6 arbitrariamente, pero este comentario sugiere que podrías subir a 18.
toFixed(n) también convertirá su número en una cadena para que pueda eliminar toString() .
Creo que es porque su número de punto flotante tiene demasiados lugares decimales para ser representado por BigNumber , por lo tanto, debe truncar la precisión de sus lugares decimales.
Para la posteridad y las personas que vienen aquí a través de los motores de búsqueda, el seguimiento completo que recibí fue:
Error: fractional component exceeds decimals (fault="underflow", operation="parseFixed", code=NUMERIC_FAULT, version=bignumber/5.5.0)Es muy interesante porque literalmente tuve un error similar hace un momento. Un par de horas después de ti.
Este problema , este problema y este fragmento de código me ayudaron a resolverlo.