2010-07-20 4 views
5

Ich habe ein BigDecimal Objekt, myNumber, mit unbekannter Länge. Zum Beispiel: 12345678.Wie wird ein BigDecimal-Objekt immer im Dezimalformat anstelle der wissenschaftlichen Notation angezeigt?

Ich möchte immer um 1 Million, diese Zahl zu teilen, so dass ich tun:

myNumber.divide(BigDecimal.valueOf(1000000)) 

ich 12.345678.

Ich möchte dies als eine Zeichenfolge, um „12.345678“ ohne Dezimal abschneidet setzt.

Ich auch

myNumber.divide(BigDecimal.valueOf(1000000)).toString() 

Dies funktioniert mit dem obigen Beispiel in Ordnung. Aber wenn myNumber etwas lächerlich klein oder groß ist, wie zum Beispiel:

0.00000001 

Nach dem Teil 0.00000001 von einer Million und String konvertiert, zeigt es als wissenschaftliche Notation, das ist nicht das, was ich will. Ich möchte, dass es immer im vollen Dezimalformat angezeigt wird (in diesem Fall 0.00000000000001).

Irgendwelche Ideen?

+0

möglich Duplikat von [Warum gibt Java BigDecimal 1E + 1 zurück?] (Http://stackoverflow.com/questions/925232/why-does-java-bigdecimal-return-1e1) – polygenelubricants

Antwort

3

Sie müssen die Division mit der Variante divide() ausführen, die einen Rundungsmodus und eine Skalierung enthält, und die Skalierung groß genug für alle Nachkommastellen festlegen.

int s = myNumber.scale(); 
BigDecimal result = myNumber.divide(BigDecimal.valueOf(1000000), s+6, RoundingMode.UNNECESSARY); 

Dann verwenden Sie toPlainString() zu formatieren.

2

Ich denke, dass BigDecimal.toPlainString() ist die Methode, die Sie brauchen. Beachten Sie jedoch, dass die Division selbst eine Ausnahme auslöst, wenn die Dezimaldarstellung unendlich ist, z. B. mit 1/3.

+0

Können Sie ein Beispiel dafür geben, wo 'toString()' wirft keine Ausnahme und 'toPlainString()' tut? – polygenelubricants

+2

@polygeneubulicants: Es war mein Fehler, ich habe die Antwort behoben. Die ArithmeticException tritt beim Dividieren auf. Ein BigDecimal kann keine unendliche Dezimaldarstellung verarbeiten. –

+1

Ja, ich habe diese Frage auf stackoverflow gestellt =) http://stackoverflow.com/questions/2749375/arithmeticexception-thrown-during-bigdecimal-divide – polygenelubricants

1

BigDecimal.toString oder toPlainString würde helfen.