J'écrivais un code qui gère les fractions, et j'y suis entré de différentes manières, donc un mémo à ce moment-là.
J'avais besoin de diviser une valeur fractionnaire, j'ai donc écrit le code à diviser en utilisant BigDecimal comme suit.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal(1.1);
BigDecimal num2 = new BigDecimal(100);
System.out.println(num1.divide(num2));
}
}
Puisqu'il est de 1,1 ÷ 100, le résultat devrait être 0,011, mais lorsque j'essaie de l'exécuter, il génère "0.01100000000000000088817841970012523233890533447265625". Je me suis demandé pourquoi, mais cela n'a pas été utilisé correctement.
J'ai pris 1.1 comme argument lors de la génération de BigDecimal, mais il semble que cela contienne déjà une erreur. Étant donné que les fractions décimales sont représentées par des fractions binaires, certaines valeurs ne peuvent pas être exprimées en premier lieu. Si vous y réfléchissez, c'est naturel. .. .. Puisque 1.1 est une valeur qui ne peut pas être exprimée, si BigDecimal est généré en fonction de celle-ci, l'erreur sera conservée.
Évitez d'utiliser des valeurs doubles et flottantes comme indiqué ci-dessous.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("1.1");
BigDecimal num2 = new BigDecimal("100");
System.out.println(num1.divide(num2));
}
}
Cela vous donnera un calcul précis. Alors, BigDecimal a-t-il besoin d'un constructeur qui prend le double comme argument?
ArithmeticException se produit lors du calcul d'une valeur indivisible comme indiqué ci-dessous.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("1.1");
BigDecimal num2 = new BigDecimal("3");
System.out.println(num1.divide(num2));
}
}
La méthode de division de BigDecimal semble soulever une exception si elle n'est pas divisible par défaut. Par conséquent, spécifiez le nombre de chiffres et la méthode d'arrondi comme indiqué ci-dessous.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("1.1");
BigDecimal num2 = new BigDecimal("3");
System.out.println(num1.divide(num2,2,RoundingMode.FLOOR));
}
}
Recommended Posts