Avatar billede mercutio Nybegynder
26. maj 2004 - 21:09 Der er 6 kommentarer

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>
Avatar billede roenving Novice
26. maj 2004 - 21:22 #1
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>
Avatar billede mercutio Nybegynder
26. maj 2004 - 21:29 #2
Ok så det du gør i det her kode er egentlig at regne ud hvor du får det forkerte svar men du runder det så bare rigtigt af bagefter?
Avatar billede roenving Novice
26. maj 2004 - 21:34 #3
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 ...
Avatar billede mercutio Nybegynder
26. maj 2004 - 21:39 #4
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?
Avatar billede mercutio Nybegynder
26. maj 2004 - 21:42 #5
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.
Avatar billede roenving Novice
26. maj 2004 - 21:47 #6
Det er en sikker måde ...

-- og det ser skørt ud, at den afrunder-afrunder, så man får svaret som det ses @ 21:39:20 ...
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester