Niet zo belangrijk, maar zeer eigenaardig

Status
Niet open voor verdere reacties.

JeroenE

Terugkerende gebruiker
Lid geworden
20 mrt 2005
Berichten
1.950
Als ik met gelijk welke rekenmachine of met hoofdrekenen 5750 vermenigvuldig met 1,4, dan is de uitkomst 8050.
Doe ik dit echter met een javascript, dan is de uitkomst 8049.999999999999.
PHP:
document.writeln(5750*1.4);
Hoe komt dat?

Greetz : Jer:cool:en.
 
Laatst bewerkt:
waarschijnlijk gewoon omdat je rekenmachine dat afrond...? :confused: geen idee
 
Deel op een rekenmachine nou eens 8049.999999999999 door 1.4 :confused:
 
Dat het nauwkeuriger is, is onzin. Immers als je 5750 * 14 doet kan je onmogelijk een kommagetal krijgen, dus 5750 * 1.4 heeft ook geen kommagetal.
Het zal vast iets te maken hebben met hoe hij een berekening verwerkt, maar anders gebruik je afronding om er wel op te komen.
 
PHP:
alert(5750*14/10); // !: 8050
alert(0.01+0.03+0.03) // !: 0.07
alert(0.03+0.03+0.01) // !: 0.06999999999999999
Het heeft er mee te maken dat de getallen intern niet decimaal maar binair verwerkt worden: http://www.merlyn.demon.co.uk/js-maths.htm#Float iets naar beneden scrollen voor voorbeelden.

Zolang je gehele getallen vanaf 0 blijft gebruiken schijnt het goed te gaan maar Math.round() lost het ook wel op.


Gelukkig 2006 Jeroen! Egel.
 
Laatst bewerkt:
Dank je wel voor de reacties.

Heb het opgelost zoals Egel het voorstelde :
PHP:
alert(5750*14/10);
De Math.round(); is geen optie omdat het tot twee cijfers na de komma nauwkeurig moet zijn.
Dank je wel voor de tips.

Greetz : Jer:cool:en.

Ook voor jou een prettig 2006, Egel.
Voor iedereen trouwens.
 
Standaard 2 decimalen (zoals met geldbedragen) kan je makkelijk maken op de volgende manier

document.write((5750*1.4).toFixed(2));

in echte java zou je DecimalFormat gebruiken.
 
Dank je wel, snabbi. Dat was iets wat ik nog niet wist, zoals zoveel andere dingen nog.
Dat zal ik zeker nodig hebben.

Greetz : Jer:cool:en.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan