js - loopje met decimalen werkt niet
dennis vp
31/01/2009 13:04:00hee, 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));
}
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
28/04/2024 15:12:00Jelmer -
31/01/2009 13:32:00Ik 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:
Dat levert netjes op wat je ongeveer zou verwachten
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)
1
2
3
4
5
2
3
4
5
var total = 19.20;
for(var interval = 0.10; interval <= total; interval += 0.10) {
print(Math.round(interval * 100) / 100);
}
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
dennis vp
31/01/2009 13:44:00ah 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!
Thanks voor de snelle reactie!
Gewijzigd op 01/01/1970 01:00:00 door dennis vp