我正在创建一个 ATM 代码,该代码根据用户输入的金额计算将提取多少美元/欧元(20s、10s、5s、1s、美分)的面额。我已经完成了美元计算。但现在我必须将所有这些转换为欧元(* 1.13 汇率)并将其输出到一个新的 .txt 文件(使用 PrintStream = new PrintStream)。
我正在考虑将用户输入的美元数乘以 1.13,然后使用这个新总数重复我的计算(编写一组全新的声明,然后重新打印到 .txt)。我的主要斗争是找到一种更简单的方法来做到这一点,以及如何将所有内容输出到新的 .txt。
任何意见是极大的赞赏!
import java.math.BigDecimal;
import java.io.PrintStream;
import java.util.Scanner;
import java.io.FileOutputStream;
import java.io.IOException;
public class ATM1 {
private static final BigDecimal FIVE = new BigDecimal("5");
private static final BigDecimal TEN = new BigDecimal("10");
private static final BigDecimal TWENTY = new BigDecimal("20");
private static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
public static void main(String[] args) throws IOException {
System.out.print("Please enter USD withdrawal amount: ");
Scanner user = new Scanner(System.in);
BigDecimal usdTotal = user.nextBigDecimal();
BigDecimal billsOut;
BigDecimal bills20 = usdTotal.divide(TWENTY, 0, BigDecimal.ROUND_DOWN);
BigDecimal remainder10 = usdTotal.remainder(TWENTY);
BigDecimal bills10 = remainder10.divide(TEN, 0, BigDecimal.ROUND_DOWN);
BigDecimal bills5 = remainder10.subtract(bills10.multiply(TEN)).divide(FIVE, 0, BigDecimal.ROUND_DOWN);
BigDecimal remainder5 = remainder10.remainder(FIVE.setScale(0, BigDecimal.ROUND_DOWN));
BigDecimal bills1 = (remainder5.setScale(0, BigDecimal.ROUND_DOWN));
BigDecimal cents = usdTotal.setScale(2, BigDecimal.ROUND_DOWN).subtract(usdTotal.setScale(0, BigDecimal.ROUND_DOWN))
.multiply(ONE_HUNDRED);
System.out.println("Twenty Dollar Bills: " + bills20);
System.out.println("Ten Dollar Bills: " + bills10);
System.out.println("Five Dollar Bills: " + bills5);
System.out.println("One Dollar Bills: " + bills1);
System.out.println("Cents: " + cents.toBigInteger());
user.close();
PrintStream output = new PrintStream("euro.txt");
System.setOut(output);
}
}