Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] błędy przy dodawaniu liczb ułamkowych
Forum PHP.pl > Forum > PHP
timon27
Typy float są zapisane binarnie i powoduje to błędy.
Można się zdziwić wynikiem:
  1. $x=0.1;
  2. $y=$x+$x+$x;
  3. echo $y;//0.3
  4. if ($y==0.3) echo 'równe';//nie wyświetla


Pytanko: czy istnieje jakiś sposób oprócz roundów na poprawne wyniki?

Abstrahując od tego że roundy nie zawsze pomagają...
Dla przykładu gdy ustawie precyzję 15 to warunek:
  1. if (round($y,15)==0.3) echo 'równe';//wyświetla się

bedzie już poprawny. Jednak błędy się akumulują i znowu błąd w:
  1. if (round($y+$y+$y+$y+$y+$y+$y,15)==2.1) echo 'równe';//nie wyświetla się


Może jakaś klasa/typ decimal?
irmidjusz
a http://php.net/manual/pl/book.bc.php znasz?
timon27
Już tak smile.gif
Wygląda na to o co mi chodziło.

Kod już zwraca poprawne wyniki:
  1. $f=bcadd($y,$y,15);
  2. $f=bcadd($f,$y,15);
  3. $f=bcadd($f,$y,15);
  4. $f=bcadd($f,$y,15);
  5. $f=bcadd($f,$y,15);
  6. $f=bcadd($f,$y,15);
  7. if ($f==2.1) echo 'równe'; //wyświetla się


Wiadomo że takie sytuacje rzadko się zdarzają i można je inaczej rozwiązać., jednak dobrze wiedzieć o tej klasie. Może się przydać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.