J'essaie de calculer un pourcentage "facteur". C'est-à-dire, donné 20%, le convertir en 0.2 (mon intention est de plus tard multiplier les valeurs par cela et obtenir les 20% des valeurs).Java, BigDecimal. Problèmes avec la division
Quoi qu'il en soit, la question est liée à ce morceau de code:
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);
}
J'attends le résultat de cela est quelque chose comme:
factor: 0.2
final value: 100
float value: 100
mais percentage.divide(hundred, roundingMode);
est de retour à zéro, un par conséquent je reçois:
factor:0
final falue:0
Float Value:100.0
Qu'est-ce que je fais mal? Comment puis-je diviser correctement deux grandes décimales? Au fait, j'utilise BigDecimal
parce que je calcule des pourcentages monétaires, donc je veux contrôler l'arrondi.
Si vous voulez contrôler l'arrondi, vous ne devriez pas utiliser de nombres à virgule flottante, ni flotter ni doubler. Stick avec BigDecimal. – markusk
Souvent, seul le résultat final doit avoir un arrondi contrôlé, donc vous avez utilisé BigDecimal juste pour arrondir le résultat (ou une méthode d'assistance simple). Cela peut être considérablement plus simple et plus rapide. –