Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]array_sum i dziwne wyniki - niech ktoś na to spojrzy
Forum PHP.pl > Forum > Przedszkole
Alikowski
Witam, napisałem sobie kawałek kodu i przestałem wierzyć w swoje kilkunastoletnie doświadczenie z PHP. Niech ktoś na to spojrzy i napisze o co w tym biega:
  1. $tablica=array(0.32,0.32,1.46);
  2.  
  3. $suma=array_sum($tablica);
  4. $zmienna=2.1;
  5.  
  6. echo "array_sum=$suma<br>";
  7. echo "zmienna=$zmienna<br>";
  8. if ($suma==$zmienna){
  9. echo "zgodne";
  10. } else {
  11. echo "niezgodne ".$suma."<>".$zmienna;
  12. }


wynik sktyptu:
array_sum=2.1
zmienna=2.1
zgodne

a teraz najlepsze:
  1. $tablica=array(0.32,0.32,0.32,1.14);
  2. $suma=array_sum($tablica);
  3. $zmienna=2.1;
  4.  
  5. echo "array_sum=$suma<br>";
  6. echo "zmienna=$zmienna<br>";
  7. if ($suma==$zmienna){
  8. echo "zgodne";
  9. } else {
  10. echo "niezgodne ".$suma."<>".$zmienna;
  11. }


wynik skryptu:
array_sum=2.1
zmienna=2.1
niezgodne 2.1<>2.1


Być może jest już późno, ale raczej jeszcze mózg mi pracuje.
pitu
http://php.net//manual/pl/language.types.float.php

Cytat
So never trust floating number results to the last digit, and do not compare floating point numbers directly for equality. If higher precision is necessary, the arbitrary precision math functions and gmp functions are available.
SmokAnalog
Dorzucę ten link: http://stackoverflow.com/questions/3148937...e-floats-in-php
Alikowski
Trochę to pos.....ne, ale dzięki za linki. Przynajmniej wiem o co biega. Wcześniej już skorzystałem z konwersji float na string i zadziałało.
SmokAnalog
Porąbane, to prawda smile.gif Porównywanie stringów w tym przypadku wydaje mi się sensowne.
tzm
  1. $suma=$zmienna


buehehe, działa... bez sprawdzania typów.
to są uroki dynamicznego typowania
nospor
@mitorski to co ty napisales to jest przypisanie a nie porownanie....
tzm
Ok, walnąłem się o jeden =.
Do manuala zajrzałem i nie jest to dla mnie do końca logiczne.
== równość bez sprawdzania typów.
=== ze sprawdzaniem typów.
No to == powinien chyba potraktować wartości jako identyczne?

if (round($suma) === round($zmienna)) - i jest ok ... dziwne
nospor
Weź przeczytaj temat od poczatku... tu ludzie podali wyjasnienie czemu tak sie dzieje, a ty się ciagle dziwisz i jeszcze jakies bezsensowne "bueheheheh"y walisz.... czemu to ma sluzyc?
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.