Ponto Flutuante e o PHP


Geralmente usuários principiantes não chegam a usar ponto flutuante (float) ou então nem se dão conta de que as contas do PHP estão resultando valores incorretos.

Tenha muito cuidado ao operar com Floats no PHP, a melhor dica é NÃO FAÇA!

Exemplo de coisas estranhas:




<?php
var_dump ( ( 139.70 ) - ( 10.0 * 13.97 ) ); // NÃO DÁ ZERO

var_dump ( floor((0.1+0.7)*10) ); // NÃO DÁ 8
?>

O próprio manual do PHP alerta sobre os vários desses bugs, como pode ser visto em:
http://www.php.net/manual/pt_BR/language.types.float.php

Mas não pense que o PHP é ruim e esse é um problema somente dele, isso também ocorre em muitas outras linguagens, como o Javascript ou até  Java . O problema consiste na forma como o float e double são armazenados na memória pelo sistema operacional. Tem a ver com a precisão de ponto flutuante em memória e como o SO gerencia isso. Dependendo dos números que se trabalha o arredondamento em máquina é diferente do esperado.

Mas e agora, eu preciso fazer operações de ponto flutuante para um sistema contábil e não pode haver erros, como resolvo ?
Fácil, quer dizer, nem tanto. Basta você usar bibliotecas específicas para precisão como BC Math ou GMP.


Bom código e boa semana!
أحدث أقدم