Avatar billede encorez Nybegynder
15. september 2013 - 21:44 Der er 3 kommentarer og
1 løsning

Sum af double problem

Hej

Jeg skal lave en for-løkken som tæller fra f.eks. 0.4 til 0.43 med 0.01 interval.
Resultatet skulle derfor gerne være 0.4, 0.41, 0.42 og 0.43.

Men resultatet bliver istedet:
0.4
0.41000000000000003
0.42000000000000004

Jeg får samme resultat med en float. Jeg er ny i java, så det er sikkert en simple ting jeg gør forkert.
Det burde vel kunne lade sig gøre at lægge 0.01 til 0.4 i en for-løkke og få 0.41 istedet for 0.41000000000000003.

Hvordan retter jeg det?
Avatar billede arne_v Ekspert
15. september 2013 - 22:46 #1
Saadan er floating point.

:-)

Den simple loesning er at udskrive med 2 decimaler, saa vil det se rigtig ud.

Den rigtige loesning hvor du f.eks. skal regne med penge er at bruge BigDecimal fremfor double.
Avatar billede arne_v Ekspert
15. september 2013 - 23:15 #2
Demo:

import java.math.BigDecimal;

public class FPFun {
    public static void main(String[] args) {
        double x = 0.4;
        for(int i = 0; i < 10; i++) {
            System.out.println(x);
            x += 0.01;
        }
        double xx = 0.4;
        for(int i = 0; i < 10; i++) {
            System.out.printf("%.2f\n", xx);
            xx += 0.01;
        }
        BigDecimal xxx = (new BigDecimal("0.4")).setScale(2);
        BigDecimal d = (new BigDecimal("0.01")).setScale(2);
        for(int i = 0; i < 10; i++) {
            System.out.println(xxx);
            xxx = xxx.add(d);
        }
    }
}
Avatar billede encorez Nybegynder
16. september 2013 - 22:09 #3
Rigtig godt. Jeg har fået det til at virke nu :)

Mange tak for hjælpen. Læg et svar for velfortjente point
Avatar billede arne_v Ekspert
17. september 2013 - 00:26 #4
svar
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