Autor | Zpráva | ||
---|---|---|---|
o_O Profil |
#1 · Zasláno: 29. 7. 2011, 03:36:26 · Upravil/a: o_O
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 |
#2 · Zasláno: 29. 7. 2011, 06:14:44 · Upravil/a: Majkl578
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); $count bys jinak musel přetypovat na int: (int) ...
|
||
Časová prodleva: 4 dny
|
|||
o_O Profil |
#3 · Zasláno: 2. 8. 2011, 00:23:18
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... |
||
Časová prodleva: 13 let
|
0