要求用户输入表示金额的一个double类型的值。然后计算用来表示金额的最少纸币及硬币分别多少,从最大面值开始计算(假定纸币面额有:50元,20元,10元及5元,硬币面额有:1元,5角,1角,5分,2分及1分)。例如,如果输入的是82.73(82元7角3分),则程序的输出如下:1张50元纸币
1张20元纸币
1张10元纸币
0张5元纸币
2个1元硬币
1个5角硬币
2个一角硬币
0个5分硬币
1个2分硬币
1个1分硬币
1张20元纸币
1张10元纸币
0张5元纸币
2个1元硬币
1个5角硬币
2个一角硬币
0个5分硬币
1个2分硬币
1个1分硬币
double sum = 82.73;
for (int i = 0; i < values.length; i++) {
int num = (int)(sum / values[i]) ; // 用了几张这种面值的钱
System.out.println(num);
sum = sum%values[i]; // 剩余多少钱
}
double[] values = {50,20,10,5,1,0.5,0.1,0.05,0.02,0.01};
String[] str = {"张50元","张20元","张10元","张5元","个1元","个5角","个1角","个5分","个2分","个1分"};
Scanner in = new Scanner(System.in);
System.out.println("请输入计算的金钱:");
double money = in.nextDouble();
if(money>0){
for (int i = 0; i < values.length; i++) {
int num = (int)(money / values[i]) ; // 用了几张这种面值的钱
System.out.println(num+str[i]);//输出
money = money%values[i]; // 剩余多少钱
}
System.out.println("计算完成!");
}else{
System.out.println("金钱不可为负数!");
}
public static void main(String[] args) {
double[] values = {50,20,10,5,1,0.5,0.1,0.05,0.02,0.01};
String[] str = {"张50元","张20元","张10元","张5元","个1元","个5角","个1角","个5分","个2分","个1分"};
Scanner in = new Scanner(System.in);
System.out.println("请输入计算的金钱:");
double money = in.nextDouble();
if(money>0){
for (int i = 0; i < values.length; i++) {
BigDecimal bg = new BigDecimal(money);//转换格式
double now = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();//取2位小数,并四舍五入
int num = (int)(now / values[i]) ; // 用了几张这种面值的钱
System.out.println(num+str[i]);//输出
money = now %values[i]; // 剩余多少钱
}
System.out.println("计算完成!");
}else{
System.out.println("金钱不可为负数!");
}
}
关于精度没有使用BigDecimal,建议重构使用BigDecimal版本:
public class CurrencyApplication {
public static void main(String[] args) { Scanner in=new Scanner(System.in);
System.out.println("Please input the concurcy:");
String input=in.nextLine();
//skip pre check and deal
double amount=Double.parseDouble(input);
int iPart=(int)amount;
int jPart=(int)((amount-iPart)*10);
int fPart=(int)(Math.ceil((amount-iPart)*100)-jPart*10);
//avoid use values() method prevent dependency declare order
final List<Conrency> yconrencys=Conrency.yconrencys();
int[] yresults=new int[yconrencys.size()];
Arrays.fill(yresults,0);
compute(iPart, yconrencys, yresults); final List<Conrency> jconrencys=Conrency.jconrencys();
int[] jresults=new int[jconrencys.size()];
Arrays.fill(jresults,0);
compute(jPart, jconrencys, jresults); final List<Conrency> fconrencys=Conrency.fconrencys();
int[] fresults=new int[fconrencys.size()];
Arrays.fill(fresults,0);
compute(fPart, fconrencys, fresults); StringBuilder result=new StringBuilder(); for(int i=0;i<yresults.length;i++){
result.append(yresults[i]+"张->"+yconrencys.get(i).toString()+"\n");
} for(int i=0;i<jresults.length;i++){
result.append(jresults[i]+"张->"+jconrencys.get(i).toString()+"\n");
}
for(int i=0;i<fresults.length;i++){
result.append(fresults[i]+"张->"+fconrencys.get(i).toString()+"\n");
}
System.out.println(result.toString());
} private static void compute(int iPart, List<Conrency> yconrencys, int[] yresults) {
for(int i=0;i<yconrencys.size();i++) {
int value=yconrencys.get(i).getValue();
if (iPart >= value) {
yresults[i] = iPart / value;
iPart -= yresults[i] * value;
}
}
}}enum Conrency{
Y100(100,Unit.Y),
Y50(50,Unit.Y),
Y20(20,Unit.Y),
Y10(10,Unit.Y),
Y5(5,Unit.Y),
Y2(2,Unit.Y),
Y1(1,Unit.Y),
J5(5,Unit.J),
J2(2,Unit.J),
J1(1,Unit.J),
F5(5,Unit.F),
F2(2,Unit.F),
F1(1,Unit.F),
;
private final int value;
private final Unit unit; Conrency(int value, Unit unit) {
this.value = value;
this.unit = unit;
} public int getValue() {
return value;
} public static List<Conrency> yconrencys(){
return Collections.unmodifiableList(Arrays.asList(Y100,Y50,Y20,Y10,Y5,Y2,Y1));
}
public static List<Conrency> jconrencys(){
return Collections.unmodifiableList(Arrays.asList(J5,J2,J1));
}
public static List<Conrency> fconrencys(){
return Collections.unmodifiableList(Arrays.asList(F5,F2,F1));
} @Override
public String toString() {
return value+unit.toString();
} enum Unit{
Y("元"),
J("角"),
F("分");
final String unit; Unit(String unit) {
this.unit = unit;
} @Override
public String toString() {
return unit;
}
}
}