Avatar billede kichian Nybegynder
25. juli 2001 - 15:39 Der er 13 kommentarer og
3 løsninger

Forklar lige dette

På 2 maskiner har jeg konstateret følgende:

dim gurli
gurli = 23/5 \' Er lig med 4,6 absolut

Response.Write(Int(gurli*100)/100) giver 4.59

Hvad sker der?
Avatar billede jelzin101 Praktikant
25. juli 2001 - 15:40 #1
hvorfor bruger du int (int er heltal)
Avatar billede sone Nybegynder
25. juli 2001 - 15:41 #2
Kører du med en tidlig Pentium?

:)
Avatar billede sone Nybegynder
25. juli 2001 - 15:45 #3
Min gør det også!
Avatar billede sone Nybegynder
25. juli 2001 - 15:47 #4
Sjov ting:

int(gurli*10) giver 46
int(gurli*100) giver 459
Avatar billede kichian Nybegynder
25. juli 2001 - 15:48 #5
Begge mine maskiner er PII.

Dette er bare et eksempel
Avatar billede sone Nybegynder
25. juli 2001 - 15:48 #6
Endnu mere mærkeligt: int(gurli*1000) giver 4600
Avatar billede jelzin101 Praktikant
25. juli 2001 - 15:53 #7
Double >>brug den.
Avatar billede kichian Nybegynder
25. juli 2001 - 16:00 #8
>> jelzin101:
Jeg er interesseret i at trunkere tallet med 2 decimaler. Det kan jeg gøre på anden måde, men dette forbander mig en smule.
Avatar billede jelzin101 Praktikant
25. juli 2001 - 16:04 #9
ah ok. så kan jeg desv. ikke hjælpe sorry :)
Avatar billede Slettet bruger
25. juli 2001 - 16:26 #10
gør sådan her
dim gurli
gurli = Math.Round(23 / 5, 2)
Response.Write((gurli*100)/100)

Avatar billede oswald Nybegynder
25. juli 2001 - 16:46 #11
Hvis der er for at udskrive tallet så kan du også gøre dette.

dim gurli
gurli= 23/5
Response.Write int(gurli) & \".\" & ((gurli * 100) mod 100)
Avatar billede sone Nybegynder
26. juli 2001 - 08:29 #12
Det er vel mere det at Int(gurli*100) regner forkert - det er jo interessant.
Avatar billede oswald Nybegynder
26. juli 2001 - 10:13 #13
Sone:> Int regner ikke forkert!    ;)
Problemet er at 4,6, så vidt jeg kan regne ud, er en uendelig decimal brøk i det binære talsystem, og den måde som decimaler bliver lagret på internt giver afrundingsfejl ved visse tal.
Som MS siger det er ikke en fejl, det er \'behaviour by design\'
Avatar billede kichian Nybegynder
26. juli 2001 - 12:06 #14
oswald:> Uden at have regnet efter, kunne jeg være tilbøjelig til at give dig ret, men...
Hvordan forklarer du, at det i dette eksempel kun er for en faktor 100, det går galt. Og hvis dit eget eksempel holder, så kun for Int() funktionen?
Avatar billede oswald Nybegynder
26. juli 2001 - 12:41 #15
Mit eksempel laver også regnefejlen.
Det er ikke kun faktor 100 der går galt, int(gurli * 100000) giver 459999 og int(test * 100000000) giver 459999999.
Når vi snakker om meget små afrundingsfejl vil forskellen altid opstå på sidste decimal.

Den eneste måde at sikre sig mod den type afrundingsfejl er ved at sørge for at holder alle betydende cifre i integer delen. I denne tilfælde vil det betyde at det oprindelige regnestylle skylle være noget i stilen med.

dim gurli
gurli= 23/5  * 100
Response.Write (gurli \\ 100) & \".\" & (gurli mod 100)

--- lidt historie ---
Den første version af windows calculator lavede faktisk en lignende fejl. Hvis man dividerede 1 med 10 og lage resultatet til sig selv 10 gange fik man ikke 1 men 0,999.... :)
Avatar billede oswald Nybegynder
31. juli 2001 - 09:17 #16
Har du en stor sentimental tilknytning til din Points ;) eller vil du have en yderligere uddybning?
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
Kurser inden for grundlæggende programmering

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