regnefejl med javascript hvordan løses det på en smart måde?
Hej Eksperter. Prøv at kopiere underlæggende kode ind og kør det i en browser.
Popuppen burde vise 57.915 men i stedet får jeg 57.914999999999 I almindelig java kan man undgå denne regnefejl ved at bruge BigDecimal i stedet for float men hvad gør man i javascript? Jeg ved godt jeg kan gange det med 1000 og så dividere resultatet men det er bare mange steder jeg skal gøre det og det ser ikke kønt ud =)Alt hjælp er velkommen.
<html> <head> <title>Enter the title of your HTML document here</title> <SCRIPT language="JavaScript"> function beregn() { alert(304.575-246.66); } </script> </head> <body onload="beregn();"> <p>Enter the body text of your HTML document here</p> </body> </html>
Der er ikke andre muligheder i javascript, så f.eks.
<html> <head> <title>Enter the title of your HTML document here</title> <SCRIPT language="JavaScript"> function beregn(){ alert(afrund(304.575-246.66)); } function afrund(tal){ if(isNaN(tal))return "0,000"; tal = ""+(Math.round(tal*1000))/1000; punktum = tal.indexOf("."); if (punktum==-1)return tal+".000"; if (tal.length-punktum==4)return tal; if (tal.length-punktum==3)return tal+"0"; else return tal+"00"; } </script> </head> <body onload="beregn();"> <p>Enter the body text of your HTML document here</p> </body> </html>
Ja, egentlig er det ikke et forkert svar, men en konsekvens af den måde, som computeren repræsenterer decimaltal på, som giver en mulighed for afrundingsfejl på sidste ciffer ...
-- og jeg kunne ikke lige finde den generiske, jeg har, hvor man angiver antallet af decimaler, men jeg skal jo have den et sted, så hvis du har brug for en sådan kan den findes ...
Det vil jeg meget gerne have =) jeg har nemlig allerede brug for den nu... Men vil den altid virke? jeg tænker på hvis jeg nu skrev den skulle afrunde 57.9144999999999999 så skriver den 57.915 ud men det er forkert er det ikke?
Måske jeg bare skal bide i det sure æble og lave metoder jeg kan kalde til at trække et tal fra et andet hvor jeg først ganger med 10000 og når den har regnet så dividere med 10000 så der altid bliver regnet rigtigt.
-- og det ser skørt ud, at den afrunder-afrunder, så man får svaret som det ses @ 21:39:20 ...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.