Question

Je fais une mission universitaire en Java qui traite de la monnaie. Pour cela, il est conseillé d'utiliser des ints au lieu de doubles, puis de les convertir plus tard en une valeur en dollars lorsque j'imprime le relevé.

Tout fonctionne bien jusqu'à ce que je fasse des calculs sur le nombre 4005 (comme dans 40,05 $ représenté par un int). Je colle la partie de code avec laquelle j'ai des problèmes, j'apprécierais que quelqu'un puisse me dire ce que je fais mal.

import java.io.*;
class modumess {
    public static void main(String[] args) {
        int money = 4005; //Amount in cents, so $40.05;

        // Represent as normal currency
        System.out.printf("$%d.%d", money/100, money%100);
    }
}

Le code ci-dessus, lorsqu'il est exécuté, affiche 40,5 $ au lieu de 40,05 $. Qu'est-ce qui donne?

Veuillez noter que c'est pour mes devoirs et que je veux apprendre, donc j'apprécierais vraiment une explication sur la racine du problème ici plutôt qu'une simple solution.

EDIT: Suite à la réponse de Finbarr, j'ai ajouté ce qui suit au code qui semble avoir résolu le problème:

if (money%100 < 10) {
            format = "$%d.0%d";
        }

Est-ce une bonne façon de le faire ou est-ce que je complique trop les choses ici?

EDIT: Je veux juste préciser que c'était à la fois la réponse de Finbarr et de Wes qui m'a aidé, j'ai accepté la réponse de Wes parce qu'elle m'a expliqué plus clairement comment procéder.

Était-ce utile?

La solution

Une meilleure façon serait quelque chose comme ceci pour un cas général:

format = "%d.%02d";

%02d vous donne 0 remplissage pour 2 chiffres.De cette façon, vous n'avez pas besoin de l'instruction if supplémentaire.

Pour plus d’explications sur ce que vous pouvez faire au format: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

Autres conseils

L'opérateur module renvoie le reste après la division sans calcul fractionnaire.Dans ce cas, 4005% 100 renvoie 5 car le reste de 4005/100 est 5.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top