如何在Java中有效地使用模数运算符

nic*_*o_c 2 java currency modulus

我正在用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在运行时显示40.5美元,而不是40.05美元.是什么赋予了?

请注意,这是我的作业,我想学习,所以我真的很感激这里解决问题的根源,而不仅仅是一个简单的解决方案.

编辑:在Finbarr的回答之后,我在代码中添加了以下内容,似乎解决了这个问题:

if (money%100 < 10) {
            format = "$%d.0%d";
        }
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法,还是我在这里过于复杂?

编辑:我只想说清楚,这是Finbarr和Wes的回答,这对我有帮助,我接受了Wes的答案,因为它让我更清楚如何继续.

Eve*_*man 6

对于一般情况,更好的方法是这样的:

format = "%d.%02d";
Run Code Online (Sandbox Code Playgroud)

%02d为2位数字提供0填充.这样你就不需要额外的if语句了.

有关您可以采用以下格式执行的操作的更多说明,请参阅此内容:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax