Java BigDecimal : comment représenter avec précision les nombres à virgule flottante ?

Avec la classe BigDecimal de Java, il est possible de traiter des nombres à virgule flottante complexes avec précision. Ceux-ci doivent être créés dans un premier temps, et peuvent ensuite être utilisés par différentes méthodes. Ce faisant, la syntaxe employée est toujours structurée de manière similaire, de sorte que les débutants peuvent utiliser cette classe à l’issue d’une brève période d’apprentissage.

Qu’est-ce que Java BigDecimal ?

Java BigDecimal est une classe qui vous permet de représenter et de manipuler des nombres à virgule flottante complexes de taille quelconque en théorie avec une grande précision. En utilisant diverses méthodes que nous vous présentons dans cet article, vous pouvez effectuer des opérations d’arrondi, d’arithmétique, de conversion de format, de hachage, et de comparaison avancée de la plus haute précision avec cette classe.

Java BigDecimal se compose d’une échelle entière de 32 bits et d’une valeur entière non mise à l’échelle (unscale en anglais) d’une précision quelconque. Dans ce cas, « échelle » désigne le nombre de chiffres après la virgule, si elle est supérieure ou égale à zéro. Si la valeur est inférieure à zéro en revanche, elle est multipliée par « 10^(-scale) ». La taille possible de la classe n’est limitée que par la mémoire de l’ordinateur. Cet aspect demeure plutôt théorique car il est peu probable qu’un programme crée un nombre qui dépasse la mémoire disponible. Alors que BigDecimal en Java est destiné exclusivement aux nombres à virgule flottante, les entiers sont traités avec la classe BigInteger.

Hébergement Web
Hébergement Web flexible, performant et sûr
  • Certificat SSL et protection DDoS
  • Sauvegarde et restauration des données
  • Assistance 24/7 et conseiller personnel

À quoi sert la classe ?

Par sa précision, Java BigDecimal n’est pas nécessaire à chaque application, mais il existe des situations et des domaines d’application pour lesquels la classe se montre indispensable. Les calculs où même la plus petite décimale peut avoir un effet considérable interviennent par exemple dans le domaine de l’e-commerce pour les transactions. La classe est également utilisée pour des analyses statiques précises. De nombreux programmes, qui sont utilisés par exemple pour le le contrôle et la navigation d’avions ou de missiles, s’appuient sur cette classe. Java BigDecimal s’utilise également dans le domaine médical. Dans d’autres secteurs, ce calcul précis offre la plus grande certitude possible.

Comment créer un objet ?

Si vous souhaitez utiliser Java BigDecimal, vous devez d’abord importer la classe dans le programme Java. Ceci fait, vous pouvez alors déclarer un objet de cette classe, puis créer la valeur souhaitée comme argument et la passer au constructeur Java approprié. Une fois cette opération effectuée, vous pouvez utiliser les BigDecimals créés en Java. Différentes méthodes sont disponibles au sein de la classe, dont nous détaillons l’utilisation dans les sections suivantes. Voici comment importer la classe en premier lieu puis déclarer deux exemples d’objets :

/ / Votre programme Java pour la classe BigDecimal
import java.math.BigDecimal;
public class BigDecimalExemple
{
	public static void main(String[] args)
	{
		/ / Créer deux nouveaux BigDecimal
		BigDecimal ExempleUn =
			new BigDecimal ("1275936001.744297361");
		BigDecimal ExempleDeux =
			new BigDecimal ("4746691047.132719503");
	}
}
java

Vous pouvez maintenant utiliser ces objets avec les méthodes correspondantes de la classe.

Exemples pour Java BigDecimal

Après avoir créé les objets, vous utilisez différentes méthodes pour effectuer des opérations et utiliser les objets de cette manière. Nous allons vous montrer à l’aide de quelques exemples simples la façon dont cela fonctionne et quels résultats vous pouvez obtenir. La sortie est initiée par la commande Java System.out.println().

Additionner deux BigDecimals

Si vous souhaitez additionner deux BigDecimals en Java, vous pouvez faire appel à la méthode add(). Pour ce faire, vous renseignez les deux valeurs dont vous voulez calculer la somme. Dans notre exemple, nous voulons ajouter la valeur « ExempleUn » à la valeur « ExempleDeux ». Le code se présente comme suit :

ExempleUn =
ExempleUn.add(ExempleDeux);
System.out.println ("Le résultat recherché après l’addition est : " + ExempleUn);
java

Soustraire des nombres

Pour soustraire deux valeurs, vous avez besoin de la méthode subtract(). L’exemple suivant consiste à soustraire « ExempleDeux » de « ExempleUn ». Le code correspondant se présente comme suit :

ExempleUn =
ExempleUn.subtract(ExempleDeux);
System.out.println ("Le résultat recherché après la soustraction est : " + ExempleUn);
java

Multiplier les valeurs

La méthode par laquelle vous multipliez deux BigDecimals en Java fonctionne de manière très similaire. Il s’agit de multiply() et utilise l’objet « multiplier » comme argument. Si vous voulez multiplier « ExempleDeux » par « ExempleUn », le code correspondant s’apparente à ceci :

ExempleUn =
ExempleUn.multiply(ExempleDeux);
System.out.println ("Le résultat recherché après la multiplication est : " + ExempleUn);
java

Diviser des nombres

Si vous voulez diviser deux BigDecimals en Java, optez pour la méthode divide(). En principe, elle adopte également la syntaxe connue et ressemble à ceci :

ExempleUn =
ExempleUn.divide(ExempleDeux);
System.out.println ("Le résultat recherché après la division est : " + ExempleUn);
java

Cela ne fonctionne toutefois que si le résultat est exact ou un entier. Si ce n’est pas le cas, le message d’erreur suivant est émis : java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.. Ceci décrit une erreur d’exécution. Pour éviter cela, il existe différentes options d’arrondi pour la méthode divide(), qui peuvent être passées via java.math.RoundingMode. Vous pouvez faire votre choix parmi les constantes suivantes :

Constante Fonction
CEILING Arrondit à l’infini positif
DOWN Arrondit à 0
FLOOR Arrondit à l’infini négatif
HALF_DOWN Arrondit au plus proche voisin et opposé à 0, si les deux sont équidistants
HALF_EVEN Arrondit au plus proche voisin et au nombre pair le plus proche, si les deux sont équidistants
HALF_UP Arrondit au plus proche voisin et dans la direction 0, si les deux sont également distants
UNNECESSARY Ne nécessite pas d’arrondi et effectue uniquement des opérations exactes. Cette constante ne peut être utilisée que si la division est exacte
UP Arrondit à partir de 0

Vue d’ensemble des méthodes les plus importantes

Maintenant que vous avez appris à utiliser Java BigDecimal et à faire appel à des méthodes dans ce but, nous conclurons en présentant quelques-unes des méthodes les plus importantes dans une vue d’ensemble.

Méthode Fonction
abs() BigDecimal avec la valeur absolue de ce BigDecimal
add() Retourne un BigDecimal dont la valeur est composée de (this + Addend)
divide() La valeur de la sortie résulte de (this / Divisor)
max(BigDecimal val) Retourne le maximum de ce BigDecimal
min(BigDecimal val) Retourne le minimum de ce BigDecimal
movePointLeft(int n) Retourne un BigDecimal où la virgule a été décalée vers la gauche de la valeur « n »
movePointRight(int n) Retourne un BigDecimal où la virgule a été décalée vers la droite de la valeur « n »
multiply(BigDecimal multiplicand, MathContext mc) Retourne une valeur résultant de (this * multiplicande)
Conseil

Notre Digital Guide vous permet d’en apprendre beaucoup plus sur le langage de programmation bien connu et populaire : par exemple, vous pouvez vous familiariser avec les opérateurs Java et découvrir l’essentiel sur les différences entre Java et JavaScript ou Java et Python.

Cet article vous a-t-il été utile ?
Page top