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