Jeg sad med min kode til et ratingsystem hvor man kan stemme med et tal som skal være 1, 2, 3, 4 eller 5 og ikke højere eller lavere.
Men hvad sker der så lige her hvor jeg har et array kun med tal der alle er over 5... undtaget det sidste.
- <?php
-
- $ratings = array(
- 5.0000000000000001
- ,5.000000000000001
- ,5.00000000000001
- ,5.0000000000001
- ,5.000000000001
- ,5.00000000001
- ,5.0000000001
- ,5.000000001
- ,5.00000001
- ,5.0000001
- ,5.000001
- ,5.00001
- ,5.0001
- ,5.001
- ,5.01
- ,5.1
- ,5
- );
-
- foreach ($ratings as $rating) {
-
- if ($rating <= 5) {
-
- echo "$rating er under eller lig 5" . "<br>\r\n";
-
- } else {
-
- echo "$rating er over eller lig 5" . "<br>\r\n";
-
- }
-
- }
-
- ?>
Jeg får dette resultat.
5 er under eller lig 5
5 er over eller lig 5
5 er over eller lig 5
5.0000000000001 er over eller lig 5
5.000000000001 er over eller lig 5
5.00000000001 er over eller lig 5
5.0000000001 er over eller lig 5
5.000000001 er over eller lig 5
5.00000001 er over eller lig 5
5.0000001 er over eller lig 5
5.000001 er over eller lig 5
5.00001 er over eller lig 5
5.0001 er over eller lig 5
5.001 er over eller lig 5
5.01 er over eller lig 5
5.1 er over eller lig 5
5 er under eller lig 5
Det må jo være noget med floating point som jeg ikke forstår så meget af. Men det er jo lidt et problem hvis man regner med at 5 er det højeste tal der må kommer ind også går 5.0000000000000001 igennem alligevel.
Hvad går i andre for at undgå sådan noget ?
Man kunne måske bruge is_int() men hvis nu dataen kommer fra en hjemmeside formular så er det altid en streng har jeg læst.
Indlæg senest redigeret d. 24.01.2013 04:50 af Bruger #13010