2012-01-17 2 views
2

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

Все работает нормально, пока не сделаю расчеты на число 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: Я просто хочу дать понять, что это помогло мне и Finbarr, и ответ Уэса, я принял ответ Уэса, потому что он дал мне более четкое представление о том, как действовать.

+1

это будет работать? http://www.java2s.com/Tutorial/Java/0120__Development/twodigityeartyTy.htm – Shad

+0

Я проверю ссылку, спасибо. –

ответ

6

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

format = "%d.%02d"; 

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

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

2

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

+0

oh, справа. Есть ли способ исправить это или мне нужно вручную добавить 0. Я должен использовать оператор модуля, но кажется, что когда дело доходит до значений, подобных приведенному выше, это работает не очень хорошо. –

Смежные вопросы