Noch eine Frage

Hallo nochmal!

Danke für Eure Antworten zu dem „Typen-Problem“. Ich programmiere noch nicht so lange und hatte in der Methode ein bißchen „Streß“ mit einer TreeMap. Aber jetzt funktioniert es super (er sortiert alles ganz brav mit einem Comparator…).

Aber jetzt habe ich schon wieder ein weiteres Problem:

Ich habe eine double-Zahl:
double zahl;

Sie kann z. B. folgende Werte haben:
3.12345678574
5.4343
775.32
88.0

Jetzt bräuchte ich eine Möglichkeit, die Zahlen auf (z. B.) zwei Stellen nach dem Komma zu runden (kaufmännisch, also ab 5 nach oben).
Frage: --> Muß ich schreiben:
double gerundeteZahl = Math.round(zahl * 100) / 100;

Das erscheint mir etwas umständlich und auch nicht besonders performant (ich habe viele Zahlen und er muß immer rechnen * 100 / 100…). Außerdem möchte ich auf z. B. 50 Nachkommastellen runden.

Das geht dann wohl nur mit „BigDecimal“, oder?
Aber da habe ich das Problem, daß double sowieso nur bis zu ca. 17 Stellen geht und die auf 50 Nachkommastellen gerundete Zahl auch nicht genauer sein kann… (es kommen lauter 0).

Also folgende Frage/Bitte:
–> Ich bräuchte ein kleines Beispielprogramm, mit dem man z. B. den Ausdruck „2 / 3“ auf 20 Nachkommastellen runden kann (also: 0.666…67).
–> Zusätzlich sollte er mir alle „kürzeren“ Zahlen (also. z.B. „1.5“ als Ergebnis des Ausdrucks „3 / 2“) hinten mit entsprechend vielen „0“ ausgeben (also: ca. „1.500000000000000000000000“).

Wär´ super, wenn Ihr mir helfen könnt!

Danke,
Gustav

Hi Gustav,

Also folgende Frage/Bitte:
–> Ich bräuchte ein kleines Beispielprogramm, mit dem man
z. B. den Ausdruck „2 / 3“ auf 20 Nachkommastellen runden kann
(also: 0.666…67).
–> Zusätzlich sollte er mir alle „kürzeren“ Zahlen (also.
z.B. „1.5“ als Ergebnis des Ausdrucks „3 / 2“) hinten mit
entsprechend vielen „0“ ausgeben (also: ca.
„1.500000000000000000000000“).

folgender Code

import java.math.BigDecimal;

class Gustav 
{
 public static void main( String args[] )
 {
 BigDecimal a, b, c, d;

 a = new BigDecimal( 2 );
 b = new BigDecimal( 3 );
 
 c = a.divide( b, 20, 4 ); // a/b, 20 Nachk.st., ROUND\_HALF\_UP = 4
 d = b.divide( a, 20, 4 ); // b/a, 20 Nachk.st., ROUND\_HALF\_UP = 4
 
 System.out.println( c );
 System.out.println( d );
 }
}

führt zu der von dir gewünschten Ausgabe.
Die Signatur von divide ist normalerweise die, das an 3. Stelle eines der Round-Felder (ROUND_HALF_UP etc.) angegeben wird. Mein Compiler hat aber komischerweise andauernd gemeckert, dass er das Symbol nicht kennt, aber wenn ich den konkreten int-Wert nehme, dann gehts. (siehe API-Doku)

Ciao, Bill

Die Signatur von divide ist normalerweise die, das an
3. Stelle eines der Round-Felder (ROUND_HALF_UP etc.)
angegeben wird. Mein Compiler hat aber komischerweise
andauernd gemeckert, dass er das Symbol nicht kennt, aber wenn
ich den konkreten int-Wert nehme, dann gehts. (siehe API-Doku)

Es muss heissen

BigDecimal.ROUND_HALF_UP statt nur ROUND_HALF_UP

Grüße
Bruno

Es muss heissen

BigDecimal.ROUND_HALF_UP statt nur ROUND_HALF_UP

stimmt! Bin zur Zeit bissel C++ verwöhnt…

Ciao, Bill