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.
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.
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
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.