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
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
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...
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