Ich versuche, einen Prozentsatz "Faktor" zu berechnen. Das heißt, bei einer 20%, wandeln Sie es in 0,2 um (meine Absicht ist, später Werte damit zu multiplizieren und die 20% der Werte zu erhalten).Java, BigDecimal. Probleme mit der Division
Wie dem auch sei, die Frage mit diesem Stück Code bezogen werden:
public static void main(String[] args) {
int roundingMode = BigDecimal.ROUND_FLOOR;
BigDecimal hundred = new BigDecimal("100");
BigDecimal percentageFactor = null;
BigDecimal percentage = new BigDecimal("20");
BigDecimal value = new BigDecimal("500");
percentageFactor = percentage.divide(hundred, roundingMode);
float f = percentage.floatValue()/hundred.floatValue();
f = value.floatValue() * f;
BigDecimal aux = value.multiply(percentageFactor);
System.out.println("factor:"+percentageFactor.toString());
System.out.println("final falue:"+aux.toString());
System.out.println("Float Value:"+f);
}
ich das Ergebnis dieser erwarten wäre so etwas wie sein:
factor: 0.2
final value: 100
float value: 100
sondern percentage.divide(hundred, roundingMode);
Null zurückkehrt, eine daher bekomme ich:
factor:0
final falue:0
Float Value:100.0
Was mache ich falsch? Wie kann ich zwei große Dezimalstellen richtig teilen?
Übrigens verwende ich BigDecimal
, weil ich monetäre Prozentsätze berechnen werde, also will ich Kontrolle über das Runden.
Wenn Sie Kontrolle über das Runden wollen, sollten Sie überhaupt keine Fließkommazahlen verwenden, weder float noch double. Bleib bei BigDecimal. – markusk
Oft muss nur das Endergebnis gerundet werden, so dass Sie BigDecimal nur zum Runden des Ergebnisses (oder einer einfachen Hilfsmethode) verwendet haben. Dies kann wesentlich einfacher und schneller sein. –