Come uso efficacemente l'operatore del modulo in Java
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.
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.