komma getallen optellen en vergelijken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Opdracht: DevOps Expert/Ontwikkelaar @ Assen

2021-03-23 iSense Opdracht: DevOps Expert/Ontwikkelaar Ben jij een ervaren DevOps expert / applicatiebeheerder-ontwikkelaar? Heb jij ervaring met het analyseren van productieproblemen en het oplossen hiervan? Lees dan snel verder! ISBI49414 Organisatie De organisatie is een van de grotere ICT-dienstverleners binnen de Rijksoverheid. Zij ondersteunen de primaire processen van diverse uitvoeringsorganisaties en de ministeries. Taken Als DevOps expert / applicatiebeheerder-ontwikkelaar ben jij verantwoordelijk voor een set van applicaties. Met jouw kennis en vaardigheden ben je tot het volgende in staat: Je analyseert productieproblemen en lost ze op, al dan niet in samenwerking met andere afdelingen. Je bouwt kleine, maar ook grote

Bekijk vacature »

Opdracht: DevOps Ontwikkelaar @ Assen

2021-03-23 iSense Opdracht: DevOps Ontwikkelaar Als DevOps ontwikkelaar ben jij verantwoordelijk voor het ontwikkelen en onderhouden van het portaal en daaraan gerelateerde applicaties. ISBI49429 Organisatie De organisatie is een van de grotere ICT-dienstverleners binnen de Rijksoverheid. Zij ondersteunen de primaire processen van diverse uitvoeringsorganisaties en de ministeries. Taken Je bouwt in teamverband aan functionele wijzigingen op de applicatie die uit de digitale strategie voortvloeien. Je analyseert productie-incidenten en lost ze op, in samenwerking met andere afdelingen. Je houdt je bezig met applicatie monitoring en de doorontwikkeling daarvan. Je draagt bij aan een effectieve ontwikkelomgeving door mee te werken aan een

Bekijk vacature »

Tom aan t Goor

Tom aan t Goor

23/01/2014 20:09:03
Quote Anchor link
Hoi hoi,

Ik heb een vraagje.
Hier 2 stukjes code, die in principe precies het zelfde zijn.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// Voorbeeld 1
$var1 = 21.00;
$var2 = 3.99;
$var3 = 24.99;

if(($var1+$var2)==$var3){
  echo 'A';
}



// Voorbeeld 2
$var1 = 21.00;
$var2 = 3.99;
$var3 = 24.99;

if( round($var1+$var2,2)== round($var3,2) ){
  echo 'B';
}

?>


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?
 
PHP hulp

PHP hulp

17/06/2021 09:32:04
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

23/01/2014 21:04:28
Quote Anchor link
Het waarom kan ik niet uitleggen, PHP gaat niet goed om met floats.
Je zal dus altijd aan je tweede voorbeeld gebonden zijn.
Gewijzigd op 23/01/2014 21:13:01 door Ger van Steenderen
 
Wouter J

Wouter J

23/01/2014 22:23:03
Quote Anchor link
PHP en floating points, of moet ik zeggen scripttalen en floating points (JAVA heeft er ook problemen mee volgens mij), dat is nooit een succes geweest.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.