Operações com Decimais no Solidity

Embora o Solidity não possua um tipo de dados específico para números fracionários (float), é possível realizar operações com valores decimais utilizando algumas técnicas avançadas. Abordaremos neste guia como trabalhar com decimais no Solidity .

1. Compreendendo a ausência do tipo float:

O Solidity, por design, não oferece suporte nativo para o tipo float. Essa decisão visa garantir a precisão e confiabilidade nas transações na blockchain, evitando erros de arredondamento e inconsistências. Em vez disso, o Solidity utiliza tipos inteiros de alta precisão para representar valores decimais.

2. Trabalhando com inteiros de alta precisão:

No Solidity, geralmente, utilizamos o tipo uint256 para armazenar valores decimais. Esse tipo permite representar números inteiros com até 256 bits, o que equivale a uma precisão de 18 casas decimais.

3. Manipulando decimais:

Para realizar operações com decimais no Solidity, é necessário manter o controle da precisão manualmente. Isso significa que, ao invés de simplesmente utilizar valores decimais fracionários, devemos multiplicá-los por um fator de escala antes de armazená-los e realizar operações.

4. Exemplo Prático: Calculando:

O Ether é a unidade principal da moeda Ethereum, enquanto o Wei é a menor subunidade (1 Ether = 1.000.000.000.000.000.000 Wei).

Ao realizar operações com valores decimais, lembre-se de manter o controle da precisão. Por exemplo, ao dividir 1 Ether por 5 Ether, o resultado bruto seria 0.2 ether. No entanto, como o Solidity trabalha com inteiros, a precisão deve ser considerada.

Para obter o resultado correto (0.2 Ether), multiplicamos tanto o dividendo quanto o divisor por 10^18 (fator de escala do Ether):


      uint256 constant ETHER_TO_WEI = 1000000000000000000;
      uint256 etherToDivide = 1 ether * ETHER_TO_WEI; // 1 Ether em Wei
      uint256 decimalDivisor = 5 ether * ETHER_TO_WEI; // 5 Ether em Wei
      uint256 result = ((etherToDivide * ETHER_TO_WEI) / decimalDivisor); 
      //Observe que o valor de result deve ser em WEI para manter a precisão. 

Existem diversas ferramentas online que podem auxiliar na conversão entre Ether e Wei, como a calculadora da Alchemy: https://www.alchemy.com/gwei-calculator

Trabalhar com decimais no Solidity exige atenção e cuidado para garantir a precisão das operações. Ao dominar as técnicas apresentadas neste guia, você estará apto a realizar cálculos complexos e seguros em seus contratos inteligentes.

Last updated