Autor Zpráva
o_O
Profil
Zdravím,

mám takový zajímavý problém. V případě, když do níže vypsané funkce vložím číslo 46 (to samé u 23, 28, 41, 82, 87), obsahuje proměnná $count číslo 4. Když dojde na $i=3, v $count se ovšem zobrazí podivuhodné číslo -4.4408920985006E-16.
function showRatingStars($percent){
  $count=($percent/10)-(($percent%10)/10); // Vydělí číslo deseti a zruší zbytek
  $used=0;$ret='';
  for($i=1;$i<=5;$i++){
    if($count==0){
      $ret.='<span class="ratempty"></span>';
    }elseif($count==1){
      $ret.='<span class="ratmedium"></span>';
      $count--;
    }elseif($count>1){
      $ret.='<span class="ratfull"></span>';
      $count=$count-2;
    }
  }
  return $ret;
}

V případě jiných čísel se vše vypisuje v pořádku.

-2.2204460492503E-16 - 23
-2.2204460492503E-16 - 28
-4.4408920985006E-16 - 41
-4.4408920985006E-16 - 46
-8.8817841970013E-16 - 82
-8.8817841970013E-16 - 87
// Za pomlčkou je číslo u kterého to blbne, před ní pak výsledek odčítání

Četl jsem, že PHP počítá ve dvojkové soustavě, čímž může chybovat u počítání s necelými čísly, ale 2-2... o_O

Předem děkuji za každou radu.
Majkl578
Profil
V $count totiž není typu integer, ale float, který má omezenou přesnost. Víc se dozvíš v manuálu PHP.

o_O:
$count=($percent/10)-(($percent%10)/10); // Vydělí číslo deseti a zruší zbytek
Nešla by tahle zběsilost zapsat třeba takhle?
$count = floor($percent / 10);
Pak by ti to mimochodem fungovalo jak očekáváš. V původním přiřazení do $count bys jinak musel přetypovat na int: (int) ...
o_O
Profil
Díky, když jsem se na to koukl teď, nechápu, jak jsem mohl takovou prasárnu vůbec napsat.

A to jsem si ještě nechával přes var_dump vypisovat $count... Slepec...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0