我正在用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的答案,因为它让我对如何继续下去更加清楚。
答案 0 :(得分:6)
对于一般情况,更好的方法是这样的:
format = "%d.%02d";
%02d
为2位数提供0填充。这样你就不需要额外的if语句了。
有关格式:[{3}}
可以执行的操作的更多说明,请参阅此处答案 1 :(得分:2)
模数运算符在除法后返回余数而不进行分数计算。在这种情况下,4005%100返回5,因为4005/100的剩余部分为5。