Comparer un `uint` avec un` ufixed`

Taimur

Comparer un `uint` avec un` ufixed`


Je dois m’assurer que la valeur envoyée à mon contrat est au moins un certain montant. Pour ce faire, je dois pouvoir comparer la valeur avec un ufixed :

 require ( msg . value >  previousValue *   1.1 ) 

mais j’obtiens l’erreur suivante:

TypeError: Operator > not compatible with types uint256 and ufixed128x18

Quelle est la bonne façon de procéder?

Merci

Réponses


 hextet

L’utilisation de 1100000000000000000 à la place de 1.1 devrait résoudre votre problème.Toutefois, lors de la mise à l’échelle de valeurs comme celle-ci, vous devez vous assurer que vous mettez à l’échelle toutes les valeurs en conséquence afin de ne pas obtenir une troncature bizarre ou des résultats inattendus.

Lecture utile sur le sujet:

Comment puis-je effectuer une division de type flottant en solidité?

La meilleure façon de faire des maths USD dans Solidity?

Taimur

Merci! Pourriez-vous expliquer pourquoi je dois diviser le résultat final par 1 ether s’il vous plaît?

hextet

Hé désolé, j’ai mal tapé, vous n’avez pas toujours à diviser le résultat final par 1 ether vous devez simplement vous assurer que lorsque vous mettez à l’échelle une valeur, vous mettez à l’échelle toutes les autres valeurs en conséquence.

Taimur

Ah d’accord, merci. Quelle mise à l’échelle est utilisée ici? Pourquoi cela résout-il le problème? Vous savez où je peux aller pour en savoir plus sur ces trucs?

hextet

La raison pour laquelle vous devez mettre cette valeur à l’échelle est que l’EVM n’a pas de concept utilisable d’entiers à virgule fixe, et vous ne voudriez même pas les utiliser. Par conséquent, vous devez disposer d’une méthode pour gérer ces valeurs. Personnellement, je convertis tout « en base de wei ». Dites par exemple votre numéro 1.1 pour convertir cela « en base de wei », vous pouvez vous rendre sur un site Web comme celui-ci ( etherconverter.online ), saisir 1.1 dans le champ ether et prendre la valeur du champ wei . Ou multipliez simplement votre valeur par 10**18 .

hextet

Je vais inclure quelques liens dans mon article qui vous aideront


 bordalix

Pensez autrement:

 require ( msg . value >  previousValue *   11   /   10 ) 

 

avec, comparer, ufixed`, uint, un

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *