Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

kaufmännisches Runden von BigDecimal-Variablen

1,205 views
Skip to first unread message

Michael Joos

unread,
Mar 7, 2001, 6:05:54 AM3/7/01
to
Hallo,

ich möchte mit 2 Zahlen (beides BigDecimal-Variablen) rechnen und
anschliessend das Ergebnis kaufmännisch korrekt darstellen.

Folgendes Beispiel: es sollen von einem Betrag von 14,50 11 Prozent
abgezogen werden. Das Ergebnis soll mit 2 Nackkommastellen ausgegeben
werden. Der abzuziehende Betrag sollte in diesem Fall 1,60 lauten
stattdessen bekomme ich nur 1,59 herraus.

Der dazugehörende Programmcode sieht wie folgt aus:

BigDecimal w4 = new BigDecimal("14.50");
BigDecimal w5 = new BigDecimal("11.00");
BigDecimal w7 = (new BigDecimal((w4.doubleValue() *
w5.doubleValue())/100)).setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println("Wert4: " + w4);
System.out.println("Wert5: " + w5);
System.out.println("Wert7: " + w7);


Kann mir jemand weiterhelfen?

Mit freundlichen Grüssen
Michael Joos


Andree Große

unread,
Mar 7, 2001, 9:18:30 AM3/7/01
to

Michael Joos schrieb:

Schau Dir mal das an:

double res = 14.5 - 14.5*11.0/100.0;
BigDecimal bd = new BigDecimal(res);
BigDecimal bd1 = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bd.toString());
System.out.println(bd1.toString());

HTH Andree

Michael Joos

unread,
Mar 7, 2001, 10:31:23 AM3/7/01
to
Hallo,

vielen Dank für die Antwort.
Allerdings funktioniert das nur in dem von mir beschriebenen Fall, d.h. wenn
von einem Betrag prozentual etwas abgezogen werden soll. Möchte ich aber
genau diesen Betrag, der abgezogen wird ermitteln klappt es leider nicht.
Ich erhalte wieder 1,59.
Über einen Umweg (wenn ich von meinem Ursprungsbetrag den neu ermittelten
Betrag abziehe) komme ich zwar zu dem Differenzbetrag (1,60). Doch das ist
ja leider auch nur ein Workaround.

MfG
Michael Joos

Andree Große <Onke...@t-online.de> schrieb in im Newsbeitrag:
3AA64336...@t-online.de...

Nico Seessle

unread,
Mar 7, 2001, 1:18:20 PM3/7/01
to
"Michael Joos" <michae...@dpd.de> schrieb im Newsbeitrag
news:985k0q$f369$1...@ID-7852.news.dfncis.de...

> Hallo,
>
> vielen Dank für die Antwort.
> Allerdings funktioniert das nur in dem von mir beschriebenen Fall, d.h.
wenn
> von einem Betrag prozentual etwas abgezogen werden soll. Möchte ich aber
> genau diesen Betrag, der abgezogen wird ermitteln klappt es leider nicht.
> Ich erhalte wieder 1,59.
> Über einen Umweg (wenn ich von meinem Ursprungsbetrag den neu ermittelten
> Betrag abziehe) komme ich zwar zu dem Differenzbetrag (1,60). Doch das ist
> ja leider auch nur ein Workaround.
>
Wie wäre es damit:

import java.math.*;
public class Test {
public static void main(String[] args) {
BigDecimal HUNDERT = new BigDecimal("100");
BigDecimal grundwert = new BigDecimal("14.50");
BigDecimal prozentsatz = new BigDecimal("11.00");
BigDecimal prozentwert = grundwert
.multiply(prozentsatz)
.divide(HUNDERT, 2,BigDecimal.ROUND_HALF_UP);
BigDecimal result = grundwert.subtract(prozentwert);
System.out.println("1: " + grundwert);
System.out.println("2: " + prozentsatz);
System.out.println("3: " + prozentwert);
System.out.println("4: " + result);
}
}


Zwischendurch immer mal wieder double's draus zu machen kann unglückliche
Ergebnisse geben :-)

Nico

0 new messages