Estoy tratando de calcular un porcentaje de "factor". Es decir, dado un 20%, conviértalo en 0.2 (mi intención es luego multiplicar valores por eso y obtener el 20% de los valores).Java, BigDecimal. Problemas con la división
De todos modos, la cuestión está relacionada con este pedazo de código:
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);
}
que sería de esperar el resultado de que esto es algo como:
factor: 0.2
final value: 100
float value: 100
pero en lugar percentage.divide(hundred, roundingMode);
está volviendo cero, una de ahí obtengo:
factor:0
final falue:0
Float Value:100.0
¿Qué estoy haciendo mal? ¿Cómo puedo dividir dos grandes decimales correctamente?
Por cierto, estoy usando BigDecimal
porque voy a calcular los porcentajes monetarios, por lo que quiero control con respecto al redondeo.
Si desea control sobre el redondeo, no debe utilizar números de coma flotante, ni flotante ni doble. Quédate con BigDecimal. – markusk
A menudo, solo el resultado final debe tener un redondeo controlado, por lo que ha utilizado BigDecimal solo para redondear el resultado (o un simple método de ayuda). Esto puede ser significativamente más simple y rápido. –