Avatar billede Lasse Novice
01. april 2002 - 20:52 Der er 7 kommentarer og
1 løsning

FEJL i javascript eller er det mig

Ja, jeg har 2 foelgende saetninger i javascript som ikke giver det oenskede resultat:

alert(eval("12.35 + 10.45"))

alert(Number("12.35") + Number("10.45"))

Skal man konvertere decimal tal paa en anden maade, eller er dette en fejl i javascript?

Hvordan kommer jeg udenom det... saaledes at jeg runder op henholdsvis ned?
Avatar billede Lasse Novice
01. april 2002 - 20:53 #1
Ehhh, resultatet af disse to er :

22.79999999997

hvilket efter min basale viden indenfor matematik ikke helt stemmer overens...
Avatar billede Lasse Novice
01. april 2002 - 20:54 #2
ciel kommer udenom dette problem kan jeg se
Avatar billede Lasse Novice
01. april 2002 - 20:55 #3
round er vist bedre
Avatar billede cms Nybegynder
01. april 2002 - 21:56 #4
er du skizofren?
Avatar billede jakoba Nybegynder
01. april 2002 - 22:16 #5
Det er et MEGET almindeligt problem.

Computeren gemmer tal binært og vores talsystem er decimalt.

når det tal der skal skrives fra computeren er et der kan laves ved at dele med 2 skriver computeren det perfekt. Hver gang

prøv selv
  alert(eval("12.50 + 10.125")); //det går fint

men når tallet laves ved at dele med 5 er det kun i decimal systemet det går god hveer gang.

0,3333333... er så et tal der 'gik galt' i decimaltals systemet. det kan ikke altid skrive tal der er lavet ved at dele med 3. (eller 7 eller 11 eller 13).

Vi klarer det så med de der 3 punktummer der fortæller at 3-tallene fortsætter derudaf fore evigt. men den slags konvention fatter computeren ikke. den vil lagre tallet som et vist antal bil og for at gøre det må den runde op eller ned. Og så kommer der en fejl.

Du kan (næsten) altid kompensere for fejlen ved at sige
  rettettal = Math.round( skævttal * 100 ) / 100;

Det retter egentlig ikke fejlen men nu bliver der kun skrevet de 2 rigtige cifre og så er vi glade.

mvh JakobA
Avatar billede jakoba Nybegynder
01. april 2002 - 22:19 #6
Ups.  vist antal bil  ->  vist antal bit
Avatar billede Lasse Novice
01. april 2002 - 23:17 #7
cms>> lidt skizofren er man vel altid ;)

problemet er vel at i sproget javascript har man valgt at raepresentere tal med et vist antal bit. Der er bare ikke nok bit til at vise et tal med 2 cifre. Her ville det vaere smart at kunne deklarere variable ligesom i C++.

Anyway, den loesning du skriver havde jeg selv kommet frem til. Jeg skrev egentlig dette bare for at vise andre at der kan vaere problemer med at addere decimaltal i javascript.

Alligvel, takker for svaret
Avatar billede jakoba Nybegynder
01. april 2002 - 23:37 #8
nixen. C, C++, Java, ADA, Pascal, ...  De har allesammen samme problem.

Javascript bruger bits nok til at gemme "22.79999999997" dvs 13 cifre. men når det tal der skal gemmes ikke passer med "det efter kommaet skal kunne laves ved at dele med 2" reglen bliver det ikke gemt præcist, for så er det nødvendigt at lave en afrunding.

tak for pts
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