À vous qui êtes troublé par des points décimaux inattendus en Java

introduction

Bonsoir. Encore. Cela fait longtemps depuis mon dernier post. .. ..

Dans cet article, je décrirai comment utiliser BigDecimal, qui rend le calcul après la virgule décimale précis en Java. Je ne parlerai pas des raisons pour lesquelles le calcul après la virgule décimale peut être effectué avec précision, j'espère donc que vous pourrez le découvrir par vous-même. J'espère que cela sera utile pour ceux qui veulent calculer avec précision après la virgule décimale.

Opération à quatre règles utilisant Big Decimal (basique)

Maintenant, écrivons à propos de la méthode de description de base Big Decimal. Pour utiliser BigDecimal

.java


import java.math.BigDecimal;

Besoin d'être importé. Puisqu'il s'agit d'une bibliothèque standard, il n'est pas nécessaire de l'apporter de l'extérieur et elle peut être utilisée immédiatement. La méthode de description et l'exemple d'utilisation sont indiqués ci-dessous.

Quatre règles Méthode de description
Ajouter add
Soustraire subtract
Multiplier multiply
division divide

Main.java


import java.math.BigDecimal;
public class Main {
    public static void main(String[] args) {
        //Définition de la valeur
        int one = 1;
        int two = 2;
        BigDecimal three = BigDecimal.valueOf(3);
        BigDecimal five = BigDecimal.valueOf(5);

        //De base
        System.out.println(three.add(five));//8
        System.out.println(three.subtract(five));//-2
        System.out.println(three.multiply(five));//15
        System.out.println(three.divide(five));//0.6

        //Un peu appliqué
        System.out.println(BigDecimal.valueOf(two).add(BigDecimal.valueOf(one)).multiply(three));//9
    }
}

Une telle description est possible. De plus, comme le montre l'application de la partie commentaire, il est possible d'écrire plusieurs fois de suite. (J'ai utilisé Big Decimal pendant six mois sans le savoir ...)

Calcul de points en utilisant Big Decimal

De là, le calcul traite de la virgule décimale. Étant donné que la description de ROUND_UP etc. n'est pas recommandée dans Java9 ou version ultérieure, veuillez utiliser la description de UP etc. utilisée dans cet article. BogDecimal vous permet de tronquer ou d'arrondir les valeurs après la virgule décimale. Utilisez la méthode setScale pour ce faire. Dans le premier argument, décrivez le nombre de décimales à contrôler. Par exemple, si le premier argument de setscale est 0, il contrôle le premier chiffre. La méthode de description et l'exemple d'utilisation sont décrits ci-dessous.

Méthode d'arrondi Méthode de description
Arrondi HALF_UP
Rassembler UP
Tronquer DOWN

Main.java


import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
    public static void main(String[] args) {
        //Définition de la valeur
        BigDecimal one = BigDecimal.valueOf(1);
        BigDecimal three = BigDecimal.valueOf(3);
        BigDecimal num = new BigDecimal("1.567");

        //De base
        System.out.println(num.setScale(0,RoundingMode.HALF_UP));//2
        System.out.println(num.setScale(1,RoundingMode.DOWN));//1.5
        System.out.println(num.setScale(2,RoundingMode.UP));//1.57

        //Un peu appliqué
        System.out.println(one.divide(three).setScale(2,RoundingMode.DOWN));//error
        System.out.println(one.divide(three,2,RoundingMode.DOWN));//0.3
    }
}

La déclaration et l'affectation de variable sur la 3ème ligne de la définition de valeur sont différentes des 1ère et 2ème lignes. À ce propos, même si vous utilisez BigDecimal, vous ne pourrez peut-être pas gérer parfaitement le point décimal. En guise de contre-mesure, lors de l'utilisation du point décimal dans BigDecimal, il est préférable de le gérer comme une chaîne. Bien qu'il s'agisse d'un type String, il calculera tel quel.

J'ai fait une description spéciale dans la deuxième ligne de l'application. Je vais vous expliquer à ce sujet. Lorsqu'une fraction circulaire se produit dans une division de type BigDecimal (0,3333 dans ce cas ...) J'obtiens une exception pour java.lang.ArithmeticException. En guise de contre-mesure, Big Decimal vous permet d'écrire quelque chose comme la deuxième ligne d'application. Avec cette description, il est possible d'écrire un programme sans lever d'exception.

Conversion de type Big Decimal

Une fois que vous avez terminé de calculer le point décimal dans BigDecimal, vous souhaiterez peut-être utiliser cette valeur dans un type primitif. Par conséquent, enfin, je décrirai comment convertir du type BigDecimal en type int ou type double. Le type int et le type double sont présentés à titre d'exemple.

Le type que vous souhaitez convertir Méthode de description
int intValue()
double doubleValue()

Main.java


import java.math.BigDecimal;
public class Main {
    public static void main(String[] args) {
        //Définition de la valeur
        BigDecimal one = BigDecimal.valueOf(1);
        BigDecimal num = new BigDecimal("1.567");
        int a;
        double b;

        //Conversion de type
        a = one.intValue();
        b = num.doubleValue();
    }
}

En écrivant de cette manière, il est possible de convertir la valeur calculée par BigDecimal en un type primitif.

en conclusion

Cette fois, j'ai écrit sur la description de base de BigDecimal, qui est souvent utilisée pour effectuer avec précision des calculs après la virgule décimale en Java. Il existe de nombreuses autres méthodes utiles telles que la comparaison grande / petite de la grande décimale et de la puissance de la puissance, veuillez donc les vérifier. Si vous avez une opinion que vous aimeriez en savoir un peu plus, je peux ajouter un article. (J'ai envie d'écrire, mais cela dépend de mon niveau d'occupation ...) S'il y a des erreurs, des expressions étranges ou des parties qui peuvent être décrites plus clairement, ce sera mon étude, alors veuillez commenter. Merci d'avoir lu jusqu'ici.

Recommended Posts

À vous qui êtes troublé par des points décimaux inattendus en Java
Comment obtenir une classe depuis Element en Java
Changements de Java 8 à Java 11
Somme de Java_1 à 100
De Java à Ruby !!
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
Migration de Cobol vers JAVA
Nouvelles fonctionnalités de Java7 à Java8
Connectez-vous de Java à PostgreSQL
Comment stocker des chaînes de ArrayList à String en Java (personnel)
De Java inefficace à Java efficace
Si vous souhaitez modifier l'environnement de développement Java d'Eclipse
Multithread pour s'adapter au modèle [Java]
[Java] Points à noter avec Arrays.asList ()
Comment apprendre JAVA en 7 jours
Enregistrer la sortie dans un fichier en Java
Java sera impliqué dès aujourd'hui
De Java à VB.NET - Écriture de notes de contraste
Java, interface pour partir du débutant
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Essayez d'implémenter Yuma en Java
La route de JavaScript à Java
[Java] Conversion d'un tableau à une liste
Utilisez-vous Stream en Java?
Comment concaténer des chaînes avec Java
A vous qui avez absolument besoin de retour en arrière
[Java] Conseils et problèmes d'erreur lors de la conversion du double en grand décimal
(Limité à Java 7 ou version ultérieure) Je souhaite que vous compariez des objets dans Objects.equals
À vous à qui on a dit "Ne pas utiliser Stream API" dans le champ
Qu'est-ce que CHECKSTYLE: OFF trouvé dans la source Java? Checkstyle à savoir de
Étudiez le Deep Learning à partir de zéro en Java.
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Essayez de résoudre Project Euler en Java
Facile à créer Slack Bot avec Java
Référence Java à comprendre dans la figure
Essayez d'implémenter l'ajout n-aire en Java
Appel de méthodes Java à partir de JavaScript exécutées en Java
Points clés pour l'introduction de gRPC en Java
OCR en Java (reconnaissance de caractères à partir d'images)
Inverser la clé de la valeur dans la carte Java
Convertir l'heure UTC Java en heure JST
Comment faire une conversion de base en Java
Connectez-vous de Java à MySQL à l'aide d'Eclipse
Remplacez List <Optional <T >> par Optional <List <T >> en Java
Convertir des fichiers SVG en fichiers PNG en Java
Comment appliquer les conventions de codage en Java
De l'installation d'Eclipse à l'exécution de Java (PHP)
Comment intégrer Janus Graph dans Java
3 points difficiles à gérer Java Realm
Publier sur Slack à partir de Play Framework 2.8 (Java)
Java: Comment envoyer des valeurs du servlet au servlet
[Java] Flux du code source à l'exécution
Comment obtenir la date avec Java
Obtenir l'historique du serveur Zabbix en Java
Introduction à la surveillance à partir de Java Touching Prometheus
Précautions lors de la migration de VB6.0 vers JAVA
Ajouter des notes de bas de page aux documents Word en Java