Avatar billede esset Nybegynder
22. juli 2005 - 10:42 Der er 7 kommentarer og
1 løsning

BigDecimal med 2 decimaler

Hvordan får jeg en værdi i BigDecimal til altid at have 2 decimaler (og i DK format - #.###,##) ?
Avatar billede arne_v Ekspert
22. juli 2005 - 10:55 #1
Det er et godt spørgsmål.

Eksempel:

import java.math.*;
import java.text.*;
import java.util.*;

public class BDF {
    public static void main(String[] args) {
        BigDecimal x = new BigDecimal("12345.6");
        System.out.println(x);
        x = x.setScale(2);
        System.out.println(x);
        double xx = x.doubleValue();
        NumberFormat nf1 = NumberFormat.getInstance(new Locale("da", "dk"));
        System.out.println(nf1.format(xx));
        NumberFormat nf2 = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(new Locale("da", "dk")));
        System.out.println(nf2.format(xx));
    }
}

det sidste er nok det bedste forslag jeg kan komme op med, men jeg er ikke
helt tryg ved at det skal gennem en double.
Avatar billede simonvalter Praktikant
22. juli 2005 - 17:08 #2
Du kan saktens give den din BigDecimal direkte  nf2.format(x) og få det samme resultat.
Avatar billede simonvalter Praktikant
22. juli 2005 - 17:16 #3
jeg kan ikke umiddelbart se hvordan det er implementeret .. min ide siger " public final String format(Object o) { /* compiled code */ }"

Jeg er igang med at læse "Java puzzlers - joshua bloch, neal gafter" og jeg kan godt forstå du ikke er tryk ved double. Der kommer f.eks dette lille spm
Hvad printer denne :)
System.out.println(2.0 - 1.10);
Avatar billede arne_v Ekspert
22. juli 2005 - 17:54 #4
ja - man kan tilsyneladende godt kalde nf2.format med x - fordi der er en format
med Object

og java docs fortæller ikke meget mere:

public final String format(Object obj)

    Formats an object to produce a string. This is equivalent to

        format(obj, new StringBuffer(), new FieldPosition(0)).toString();

public abstract StringBuffer format(Object obj,
                                    StringBuffer toAppendTo,
                                    FieldPosition pos)

    Formats an object and appends the resulting text to a given string buffer. If the pos argument identifies a field used by the format, then its indices are set to the beginning and end of the first such field encountered.
Avatar billede arne_v Ekspert
22. juli 2005 - 17:56 #5
og float/double opfører sig præcist som de skal

det er ikke deres skyld at folk bruger dem til ting som de ikke skal
bruge dem til
Avatar billede esset Nybegynder
28. juli 2005 - 11:16 #6
Sorry - har været væk fra PC et par dage. Tak for svaret arne_v. Hvis du smider et svar skal du nok få dine point.
Avatar billede arne_v Ekspert
28. juli 2005 - 11:42 #7
kommer her

(det var dog Simon som opdagede at man kunne kalde format med en BigDecimal !)
Avatar billede simonvalter Praktikant
28. juli 2005 - 19:12 #8
ja men jeg brugte dit eksempel til det :)
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