Как эффективно использовать оператор модуля в Java - PullRequest
2 голосов
/ 17 января 2012

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

Все работает нормально, пока я не выполню вычисления для числа 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 долл.Что дает?

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

РЕДАКТИРОВАТЬ: После ответа Finbarr, я добавил следующее к коду, который, кажется, решил проблему:

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

Это хороший способ сделать это, или я слишком усложняю вещи здесь?

РЕДАКТИРОВАТЬ: Я просто хочу прояснить, что мне помог и Финбарр, и ответ Уэса, я принял ответ Уэса, потому что он прояснил мне дальнейшие действия.

Ответы [ 2 ]

6 голосов
/ 17 января 2012

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

format = "%d.%02d";

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

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

2 голосов
/ 17 января 2012

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

...