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

时间:2012-01-17 01:40:59

标签: 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);
    }
}

以上代码在运行时显示40.5美元,而不是40.05美元。是什么给了什么?

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

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

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

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

编辑:我只是想明确表示,Finbarr和Wes的回答都帮助了我,我接受了Wes的答案,因为它让我对如何继续下去更加清楚。

2 个答案:

答案 0 :(得分:6)

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

format = "%d.%02d";

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

有关格式:[{3}}

可以执行的操作的更多说明,请参阅此处

答案 1 :(得分:2)

模数运算符在除法后返回余数而不进行分数计算。在这种情况下,4005%100返回5,因为4005/100的剩余部分为5。