/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Fejl i PHP?
Fra : Martin Olesen


Dato : 10-10-05 23:19

Kodestumpen

<?PHP
   for ($x=22.05; $x<23.0; $x=$x+0.05) {
      $y=$x-22.55;
      echo "$y <br />";
   }
?>

giver resultatet

-0.5
-0.45
-0.4
-0.35
-0.3
-0.25
-0.2
-0.15
-0.099999999999994
-0.049999999999994
7.105427357601E-15
0.050000000000008
0.10000000000001
0.15000000000001
0.20000000000001
0.25000000000001
0.30000000000001
0.35000000000001
0.40000000000001

når det køres på en PHP 5.0.4.

Er det 'sådan er det bare', er det en fejl, eller kan man gøre
noget ved det uden at bruge afrundingsfunktioner?



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Michael Rasmussen (10-10-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 10-10-05 23:33

On Mon, 10 Oct 2005 22:18:34 +0000, Martin Olesen wrote:

Prøv følgende:
<?php
   for ($x=22.05; $x<23.0; $x=$x+0.05) {
      $y=(float)$x-22.55;
      echo "$y <br />";
   }
?>

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


jamen (10-10-2005)
Kommentar
Fra : jamen


Dato : 10-10-05 23:58

Martin Olesen wrote:
>       echo "$y <br />";

prøv

printf("%.2f <br />", $y);

Johan Holst Nielsen (11-10-2005)
Kommentar
Fra : Johan Holst Nielsen


Dato : 11-10-05 00:53

Martin Olesen wrote:
> Kodestumpen
>
> <?PHP
>    for ($x=22.05; $x<23.0; $x=$x+0.05) {
>       $y=$x-22.55;
>       echo "$y <br />";
>    }
> ?>
>

<SNIP>

> Er det 'sådan er det bare', er det en fejl, eller kan man gøre
> noget ved det uden at bruge afrundingsfunktioner?

Nej... tjek

http://php.net/float

Der står at det netop ikke er muligt ;)
Afhængig af situationen skal du afrunde. Hvis der f.eks. er tale om kr -
bør du ALTID bruge den mindste enhed... i dette tilfælde øre.. :) Det er
god skik (imho) at regne med integers og først konvertere disse til
floats til sidste - da det vil give dem mest præcise resultater :)

mvh
Johan

Martin Olesen (11-10-2005)
Kommentar
Fra : Martin Olesen


Dato : 11-10-05 09:34

Tak til alle for svar.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste