Как эффективно использовать оператор модуля в Java


Я выполняю задание колледжа на Java, которое связано с валютой. Для этого мне советуют использовать ints вместо double, а затем позже преобразовать его в долларовое значение, когда я распечатаю заявление.

Все работает нормально, пока я не сделаю вычисления на число 4005 (как в $40.05, представленном в виде int). Я вставляю ту часть кода, с которой у меня возникли проблемы, я был бы признателен, если бы кто-то мог сказать мне, что я делаю неправильно.

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

Приведенный выше код при запуске показывает $40.5, вместо $ 40,05. Что это дает?

Пожалуйста, обратите внимание, что это для моего домашнего задания, и я хочу учиться, поэтому я был бы очень признателен за объяснение о корне проблемы здесь, а не просто простое решение.

EDIT: следуя ответу Финбарра, я добавил следующее в код, который, похоже, исправил проблему:

if (money%100 < 10) {
            format = "$%d.0%d";
        }
Это хороший способ сделать это, или я слишком усложняю ситуацию?

EDIT: я просто хочу, чтобы было ясно, что это были оба Финбарра и ответ Уэса, который помог мне, я принял ответ Уэса, потому что это прояснило для меня, как действовать дальше.

2 2

2 ответа:

Лучшим способом было бы что-то вроде этого для общего случая:

format = "%d.%02d";

%02d дает вам 0 отступов для 2 цифр. Таким образом, вам не нужно дополнительное утверждение if.

Смотрите это для более подробного объяснения того, что вы можете сделать в формате: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

Оператор модуля возвращает остаток после деления без дробного вычисления. В этом случае 4005%100 возвращает 5, поскольку остаток от 4005/100 равен 5.