komma getallen optellen en vergelijken
Ik heb een vraagje.
Hier 2 stukjes code, die in principe precies het zelfde zijn.
Code (php)
In mijn ogen doet dit precies het zelfde.
Je rond het wel af op 2 decimalen, maar de getallen zijn al 2 decimalen, dus is het overbodig.
Alleen, bij mij krijg ik de A niet op het scherm, maar de B wel.
Kan iemand mij dit uitleggen?
Je zal dus altijd aan je tweede voorbeeld gebonden zijn.
Gewijzigd op 23/01/2014 21:13:01 door Ger van Steenderen
Wij mensen rekenen in base10, dat betekend in een 10-tallig stelsel. Dat klopt ook, 0 - 9 en dan 10 - 19 etc. Een computer rekent in base2, een 2-tallig stelsel ook wel binair stelsel genoemd. Die heeft 0 - 1 en dan 10 - 11, etc. Zie deze tutorial voor diepere informatie hierover.
Wanneer wij dus '0.7' hebben is dit in een base2 float 1111 met als floating point 1 (een float is een geheel getal en de plek van het komma in dat getal). Bij het omzetten gaat wat mis en wat er precies misgaat is systeem afhankelijk, maar het zorgt voor een uitwijking van ong. 1.11e-16. Voor mensen zonder wetenschappelijke notatie kennis, dit is 0.00000000000000111. Dat betekend dat '3.99' '3.990000000000000111' kan worden. En dat plus '21.000000000000000111' wordt '24.99000000000000222' en dat is niet gelijk aan '24.99'. Als je dat echter afrond naar 2 decimalen is het wel gelijk.
Merk overigens op dat je ook met dat afronden moet opletten. floor((0.7 + 0.1) * 10) levert namelijk vaak 7 op en niet 8. Veiliger is het dus om alle getallen eerst apart af te ronden en dat dan te gebruiken.
Mooi? Nee, maar tja.. dat zijn floats :)
Gewijzigd op 23/01/2014 22:28:01 door Wouter J