js - loopje met decimalen werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Dennis vp

dennis vp

31/01/2009 13:04:00
Quote Anchor link
hee, ik heb iets vaags. Ik heb een simpel loopje gemaakt met javascript. Alleen wanneer het totaal bijvoorbeeld 19.20 is, loopt ie tot 19.10. Heb een alert ingebouwd en krijg hierin af en toe vage waardes terug, die niet altijd met 2 decimalen eindigen, maar met veel meer. Weet iemand het probleem?

var total = 19.20;
var total = parseFloat(total.toFixed(2));

for(var interval = 0.10; interval <= total; interval += 0.10) {

alert(interval);
//setTimeout('counter(' +interval+')',(delay));
}
 
PHP hulp

PHP hulp

28/04/2024 15:12:00
 
Jelmer -

Jelmer -

31/01/2009 13:32:00
Quote Anchor link
Ik denk dat je daar de gevolgen van het float datatype ziet. Een float is maar 32 bits groot, maar toch kan je er oneindig grote getallen in opslaan. Omdat te laten passen dumpt hij wat van de precisie.

Op zich is dat geen probleem tenzij je de waarden graag wilt printen. Een nogal lelijke, maar wel werkende oplossing is Math.round en delen gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
var total = 19.20;

for(var interval = 0.10; interval <= total; interval += 0.10) {
    print(Math.round(interval * 100) / 100);
}

Dat levert netjes op wat je ongeveer zou verwachten
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
[...]
18.6
18.7
18.8
18.9
19
19.1
 
Dennis vp

dennis vp

31/01/2009 13:44:00
Quote Anchor link
ah vandaar.. was ik zelf niet opgekomen van dat parseFloat verhaal ;-)De oplossing is niet heel netjes, maar denk dat je sowieso dan met afronding te maken krijgt en er dus niet omheen kan.. Ik ben er wel mee gered iig!
Thanks voor de snelle reactie!
Gewijzigd op 01/01/1970 01:00:00 door dennis vp
 



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.