[JAVA] À propos du traitement de BigDecimal (avec réflexion)

À propos de Java Big Decimal

Je pense qu'il existe de nombreuses situations où java est utilisé dans le travail de développement. Je pense que Big Decimal peut être utilisé lors de la construction de la logique de calcul. Du coup, c'est un type différent des entiers ordinaires, donc j'étais confus, alors j'ai décidé de le laisser dans l'article.

Qu'est-ce que Big Decimal

https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html> Depuis oracle.docs Non, je ne comprends pas vraiment même si c'est dit mathématiquement. .. .. Donc, en d'autres termes ... Des résultats imprévus peuvent être obtenus dans le cas de calculs où les flottants et les doubles provoquent des erreurs. Par exemple

double.java


 double result = 10d / 6d;
 System.out.println(result)
 //Sortie 1.6666666666666666666666666666666666666666

C'est comme ça. Comme vous le savez peut-être, si vous voulez calculer "l'arrondi bancaire", l'exemple ci-dessus est trop irrégulier et vous aurez des ennuis. C'est là qu'intervient Big Decimal. Il est souvent utilisé pour calculer des systèmes dits comptables.

BigDecimal est différent du calcul de nombre normal et se calcule comme suit.

BigDecimalCalc.java


//Lors de la division de 1000 de type BigDecimal par 100 de type int
   BigDecimal bigNum = BigDecimal.valueOf(1000);
   BigDecimal result = bigNum.divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); 
   System.out.println(result);

Utilisez une méthode spéciale pour diviser. Normal / ne peut pas être utilisé. Voir oracle.docs pour plus de détails.

En comparant avec 0

Comment gérer 0 de Big Decimal dans le branchement conditionnel, etc. J'y suis accro si je n'y suis pas habitué. Bien sûr, j'en étais accro car je suis aussi un débutant.

ZeroCompare.java


 if(Valeur à comparer.compareTo(BigDecimal.ZERO) == 0) {
  //・ ・ ・
 }

On dirait. En d'autres termes, il n'y a pas de différence par rapport à 0, donc 0! Ce sera une comparaison. Au fait, si c'est 0 ou plus ou 0 ou moins

Compare.java


ZeroCompare.java
 if(Valeur à comparer.compareTo(BigDecimal.ZERO) > 0) {
  //・ ・ ・
 } 

Faire.

Résumé

BigDecimal est utilisé différemment des types primitifs. Il faut en être conscient. Surtout pour les débutants en Java comme moi, il est difficile d'utiliser accidentellement des flottants et des doubles lorsque vous devez effectuer des calculs précis dans un travail de développement réel, ou utiliser BigDecimal de manière incorrecte et provoquer des erreurs de compilation. Ne fais pas ça. Vous ne vous en souciez généralement pas beaucoup, mais dans le cas du travail, j'aimerais écouter attentivement le but de la logique de calcul à développer et la précision requise avant de commencer le développement [Réflexion]

Recommended Posts

À propos du traitement de BigDecimal (avec réflexion)
À propos de la gestion de Null
À propos de la description de Docker-compose.yml
[Jackson] Une histoire sur la conversion de la valeur de retour du type BigDecimal avec un sérialiseur personnalisé.
À propos du comportement de ruby Hash # ==
À propos des bases du développement Android
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
À propos du niveau de journalisation de java.util.logging.Logger
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
Vérifiez le contenu des paramètres avec le levier
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
À propos du fonctionnement de next () et nextLine ()
À propos de l'affichage initial de Spring Framework
À propos du nombre de threads de Completable Future
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Pensez à la combinaison de Servlet et Ajax
Vérifiez le contenu de l'objet argument avec Mockito
A propos de l'ordre de description des propriétés système Java
Gérez la version de Ruby elle-même avec rbenv
L'histoire du réglage de l'application Android avec libGDX
À propos de la méthode
Calculer le score de similarité des chaînes de caractères avec JAVA
Préparez l'environnement CentOS 8 avec Sakura VPS
Spécifiez la valeur par défaut avec @Builder of Lombok
Mesurez la distance du labyrinthe avec la recherche de priorité de largeur
À propos du paquet
J'ai vérifié le nombre de taxis avec Ruby
Lister le contenu des catégories créées avec Active Hash
JavaFX --Match la taille d'ImageView avec d'autres nœuds
[Grails] À propos de la zone de paramétrage et des éléments de paramétrage de application.yml
[JUnit 5] Traiter de "la référence d'assertEquals est ambiguë"
À propos de l'utilité des monades dans une perspective orientée objet
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
À propos du problème de blocage dans le traitement parallèle dans la version 4.0 de gem'sprockets
Tester le contenu d'un fichier Excel avec JUnit
L'histoire de la création d'un proxy inverse avec ProxyServlet
Surveillez l'état interne des programmes Java avec Kubernetes
Implémentez iOS14 UICollectionView avec le code minimum requis.
[Note technique] À propos des avantages et des inconvénients de Ruby
Vérifiez le résultat de l'inférence de paramètre de type générique avec JShell
À peu près le flux de développement d'applications Web avec Rails.
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Remplacez seulement une partie de l'hôte URL par java
Sortie sur la méthode, partie 2
À propos de la classe StringBuilder
Le monde de Clara-Rules (2)
Commentaire: à propos de l'interface
À propos de disconnect () de HttpURLConnection
À propos du pipeline d'actifs
À propos de la double fonction -java
À propos de la sélection d'OpenJDK
À propos de DI of Spring ①