Avatar billede nightowl24 Nybegynder
16. december 2003 - 09:22 Der er 8 kommentarer og
1 løsning

Javascript regner forkert

Hejsa

Jeg har følgende udregning i mit java script:

x = 1 - (45/100)
y = 1 + (15/100)
value = x*y*100

Dette burde give 63,25 men value bliver 63,24999999999999

Hvordan kan det være?

/Nightowl
Avatar billede mm12010 Nybegynder
16. december 2003 - 09:35 #1
x = 1 - (45/100)
y = 1 + (15/100)
value = Math.ceil(x*y*100*100)/100;
Avatar billede oesten Nybegynder
16. december 2003 - 09:38 #2
'Forkert'? Mon ikke det er ordet 'nøjagtigt' det her drejer sig om? Resultatet javascript giver er så ganske afgjort ikke forkert, prøv med lidt afrunding.
Avatar billede nightowl24 Nybegynder
16. december 2003 - 09:42 #3
Hmm, så regner begge de lommeregnerne jeg har altså forkert?
Avatar billede roenving Novice
16. december 2003 - 09:47 #4
Nej, de afrunder bare før du ser resultatet !-)
Avatar billede nightowl24 Nybegynder
16. december 2003 - 09:54 #5
Jeg synes at det er mærkeligt da denne udregning i javascriptet
x = 1-(45/100)
y = 1+(15/100)
value = x * y

sætter value = 0,6325

ganger man så med 100 bliver value = 63,249999999

Det kan jeg altså ikke forstå logikken i.

Nogen der kan forklare?
Avatar billede roenving Novice
16. december 2003 - 09:56 #6
Alle digitale regnemaskiner bruger en binær repræsentation af tal, så alle decimaltal tilnærmes med en tilgang, som ser nogenlunde sådan ud:

0,55 (x i dit eksempel) =
1/2 + 0/4 + 0/8 + 0/16 + 1/32 + 1/64 ...

Dette giver selvsagt en anelse unøjagtighed ude på de yderste decimaler afhængig af beregnes cifferdybde !-)

De fleste javascript-implementationer regner i ca. 15 betydende cifre ...
Avatar billede nightowl24 Nybegynder
16. december 2003 - 10:10 #7
Okay, så blev jeg så meget klogere :)
Avatar billede nightowl24 Nybegynder
16. december 2003 - 14:19 #8
Tror jeg fik givet point for tidligt, hvis nu x er 1+(0/100) får jeg resultatet 55.01 og det skal ifølge en almindelig regnemaskine og mit hoved give 55
Avatar billede mm12010 Nybegynder
16. december 2003 - 21:12 #9
man regner vel enten med decimaler eller uden decimaler...?
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