2012-05-17 5 views
27
teilen

Mein Code Beispiel:Wie kann ich richtig mit BigDecimal

import java.math.*; 

public class x 
{ 
    public static void main(String[] args) 
    { 
    BigDecimal a = new BigDecimal("1"); 
    BigDecimal b = new BigDecimal("3"); 
    BigDecimal c = a.divide(b, BigDecimal.ROUND_HALF_UP); 
    System.out.println(a+"/"+b+" = "+c); 
    } 
} 

Das Ergebnis ist: 1/3 = 0

Was mache ich falsch?

+1

Traurig über Lorem ipsum aber es würde mich ohne es als „die Frage war zu kurz“, um Posten nicht zulassen. –

+0

Ihr Ergebnis ist korrekt. Ein Drittel, das auf die nächste ganze Zahl gerundet wird und die Bindungen durch Aufrunden bricht, ist in der Tat eine flache, runde Null. –

+0

Also, wenn ich 0,333333333 brauche? Wie muss ich 1 durch 3 teilen? –

Antwort

51

Sie haben keine Skalierung für das Ergebnis angegeben. Bitte versuchen Sie dies

import java.math.*; 

    public class x 
    { 
     public static void main(String[] args) 
     { 
     BigDecimal a = new BigDecimal("1"); 
     BigDecimal b = new BigDecimal("3"); 
     BigDecimal c = a.divide(b,2, BigDecimal.ROUND_HALF_UP); 
     System.out.println(a+"/"+b+" = "+c); 
     } 
    } 

Dies wird das Ergebnis als 0,33 geben. Bitte lesen Sie die API

Rohan

+0

Ich sah auf 1.5 API, die 'divite (Sigdecimal, int, int)' fehlt ... –

+0

Jan der Link in meinem Beitrag ist für 1.5 API. divisor (BigDecimal divisor, int scale, int runderingMode) gibt es schon seit einiger Zeit, glaube ich. –

1

Erstellen Sie die BigDecimal s mit Schwimmer, wie "1.0"; mindestens der Zähler, wenn Sie ein Dezimalergebnis wünschen.

+0

Ist 'BigDecimal c = a.setScale (5) .divide (b, BigDecimal.ROUND_HALF_UP);' richtiger Ansatz? Kann es besser gemacht werden? –

+0

@JanAjan Ja, das ist wahrscheinlich ein besserer Ansatz. –