Domanda

Sto facendo un incarico universitario in Java che si occupa della valuta. Per questo mi consiglia di utilizzare INT invece dei doppi e quindi convertirlo in un valore in dollari quando stampino la dichiarazione.

Tutto funziona bene fino a quando non faccio calcoli sul numero 4005 (come in $ 40,05 rappresentati come un INT). Sto incollando la parte del codice con cui ho problemi, apprezzerei se qualcuno potesse dirmi cosa sto facendo di sbagliato.

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);
    }
}

Il codice sopra, quando viene eseguito, mostra $ 40,5, anziché $ 40,05. Cosa dà?

Si prega di notare che questo è per i miei compiti e voglio imparare, quindi apprezzerei davvero una spiegazione sulla radice del problema qui piuttosto che solo una soluzione semplice.

Modifica: seguendo la risposta di Finbarr, ho aggiunto quanto segue al codice che sembra aver risolto il problema:

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

È un buon modo per farlo o sto complicando troppo le cose qui?

EDIT: Voglio solo chiarire che è stata sia la risposta di Finbarr che Wes che mi ha aiutato, ho accettato la risposta di Wes perché mi ha reso più chiaro su come procedere.

È stato utile?

Soluzione

Un modo migliore sarebbe qualcosa del genere per un caso generale:

format = "%d.%02d";

%02d Ti dà 0 imbottitura per 2 cifre. In questo modo non hai bisogno dell'istruzione IF extra.

Vedi questo per ulteriori spiegazioni delle cose che puoi fare in formato: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/formatter.html#syntax

Altri suggerimenti

L'operatore del modulo restituisce il resto dopo la divisione senza calcolo frazionario. In questo caso, il 4005%100 restituisce 5 poiché il resto di 4005/100 è 5.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top