[ Marko Medojević @ 12.11.2008. 09:12 ] @
| Pravim star rating skriptu u PHP-u. U pitanju je funkcija koja prima ocenu od 0 do 5 i na osnovu prosleđenog parametra vraća zvezdice.
Slika:

Imam sledeći problem! Kada prosledim ručno kao parametar funkciji npr. broj 3.0 dobijem sliku sa tri zvezdice(što i treba):
Code:
$i = 3.0;
echo $i . " " . starRate($i) . "<br/>";
ali u for petlji, kada ciklusna promenjiva $i dođe do 3, dobijam tri i pola zvezdice:
Code:
for($i=0;$i<=5;$i+=0.2)
{
echo $i . " " . starRate($i) . "<br/>";
}
Zašto se ovo dešava i zašto je poslednja vrednost $i u okviru for petlje 4.8 kad treba 5?
Ceo kod:
Code:
<?php
/*
FUNKCIJA KOJA NA OSNOVU PROSLEDJENE OCENE(FLOAT NUMBER) OD 0 DO 5
GENERISE ZVEZDICE(GIF SLIKA)
*/
function starRate($parRating)
{
$imagesPath = "./star_rating_img"; // folder gde se nalaze slike
if($parRating <= 0)
{
$rateStars = "$imagesPath/00star.gif";
}
elseif ($parRating <= 0.5)
{
$rateStars = "$imagesPath/05star.gif";
}
elseif ($parRating <= 1)
{
$rateStars = "$imagesPath/1star.gif";
}
elseif ($parRating <= 1.5)
{
$rateStars = "$imagesPath/15star.gif";
}
elseif ($parRating <= 2)
{
$rateStars = "$imagesPath/2star.gif";
}
elseif ($parRating <= 2.5)
{
$rateStars = "$imagesPath/25star.gif";
}
elseif ($parRating <= 3)
{
$rateStars = "$imagesPath/3star.gif";
}
elseif ($parRating <= 3.5)
{
$rateStars = "$imagesPath/35star.gif";
}
elseif ($parRating <= 4)
{
$rateStars = "$imagesPath/4star.gif";
}
elseif ($parRating <= 4.5)
{
$rateStars = "$imagesPath/45star.gif";
}
elseif ($parRating <= 5)
{
$rateStars = "$imagesPath/5star.gif";
}
return "<img src=\"$rateStars\" alt=\"ocena\"/>"; // pocratni rezultat je <img> tag
}
echo "<div style=\"float:left; padding-right: 70px\">";
echo "<h2>FOR PETLJA:</h2>";
for($i=0;$i<=5;$i+=0.2)
{
echo $i . " " . starRate($i) . "<br/>";
}
echo "</div>";
echo "<div style=\"float:left;\">";
echo "<h2>RUCNO:</h2>";
$i = 3.0;
echo $i . " " . starRate($i) . "<br/>";
$i = 3.1;
echo $i . " " . starRate($i) . "<br/>";
echo "</div>";
?>
|
[ stevs986 @ 12.11.2008. 09:25 ] @
Stavi u for petlji samo manje od 5 ne manje ili jednako....
[ Miroslav Ćurčić @ 12.11.2008. 10:47 ] @
Pretpostavljam zbog rada s decimalnim brojevima jer usled zaokruživanja ume da dođe do dakvih grešaka, pa dobiješ 3,000001.
Odradi for petlju ovako:
for($x=0; $x<=50; $x+=2) ....
pa se svugde drži celih broijeva, i koriguj onaj niz "if"-ova (koji je dušu da za "switch")
[ Nemanja Avramović @ 12.11.2008. 17:01 ] @
Jesi probao eksplicitno da mu naglasiš da su decimalni brojevi u pitanju:
Code:
for($i=0;$i<=5.0;$i+=0.2)
Samo nagađam, ali možda i proradi

[ Marko Medojević @ 12.11.2008. 18:28 ] @
Na žalost ništa.
Ovde mi totalno nije jasno šta se dešava! Kada funkciji starRate($parRating) kao argument prosledim bilo koji broj(decimal, integer) radi normalno, kada istu funkciju propustim kroz for petlju gde je korak ceo broj ili 0.5 opet radi, ali kada je korak ciklusne promenjive ispod 0.5 onda dobijam neočekivane rezultate. I nije mi jasno zašto for petlja iz prve poruke ide do 4.8, kada je uslov $i<=5 ?!
[ Marko Medojević @ 12.11.2008. 18:41 ] @
E sad sam se tek našao zbunjen!
Kod:
Code:
<?php
$i = 0;
while($i <= 5.0)
{
$i+=0.2;
echo "$i ";
if($i == 3) echo "JE JEDNAKO SA 3 <br/>"; else echo "NIJE JEDNAKO SA 3 <br/>";
}
echo "<hr/>";
$i = 0;
while($i <= 5.0)
{
$i+=0.5;
echo "$i ";
if($i == 3) echo "JE JEDNAKO SA 3 <br/>"; else echo "NIJE JEDNAKO SA 3 <br/>";
}
?>
Izlaz:
0.2 NIJE JEDNAKO SA 3
0.4 NIJE JEDNAKO SA 3
0.6 NIJE JEDNAKO SA 3
0.8 NIJE JEDNAKO SA 3
1 NIJE JEDNAKO SA 3
1.2 NIJE JEDNAKO SA 3
1.4 NIJE JEDNAKO SA 3
1.6 NIJE JEDNAKO SA 3
1.8 NIJE JEDNAKO SA 3
2 NIJE JEDNAKO SA 3
2.2 NIJE JEDNAKO SA 3
2.4 NIJE JEDNAKO SA 3
2.6 NIJE JEDNAKO SA 3
2.8 NIJE JEDNAKO SA 3
3 NIJE JEDNAKO SA 3
3.2 NIJE JEDNAKO SA 3
3.4 NIJE JEDNAKO SA 3
3.6 NIJE JEDNAKO SA 3
3.8 NIJE JEDNAKO SA 3
4 NIJE JEDNAKO SA 3
4.2 NIJE JEDNAKO SA 3
4.4 NIJE JEDNAKO SA 3
4.6 NIJE JEDNAKO SA 3
4.8 NIJE JEDNAKO SA 3
5 NIJE JEDNAKO SA 3
-------------------------------------------------------------------------------
0.5 NIJE JEDNAKO SA 3
1 NIJE JEDNAKO SA 3
1.5 NIJE JEDNAKO SA 3
2 NIJE JEDNAKO SA 3
2.5 NIJE JEDNAKO SA 3
3 JE JEDNAKO SA 3
3.5 NIJE JEDNAKO SA 3
4 NIJE JEDNAKO SA 3
4.5 NIJE JEDNAKO SA 3
5 NIJE JEDNAKO SA 3
5.5 NIJE JEDNAKO SA 3
[ beep @ 12.11.2008. 20:12 ] @
http://us.php.net/float ... obrati paznju na tekst u crvenom polju ... inace to sto radis se resava bez petlje
[ Marko Medojević @ 12.11.2008. 20:17 ] @
Hvala! Sad mi je jasno!
Citat:
beep: inace to sto radis se resava bez petlje
Inače petlja mi nije ni trebala, već sam samo hteo preko nje da testiram rating sistem, koji inače radi.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.