0

我正在创建一个 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); 
        
        
        
         
          
   }
}

       

4

1 回答 1

1

很少有 API 提供从一种货币到另一种货币的轻松转换,但只有大约 1000 次点击。如果您需要更多的点击次数,您可能需要付费。

package myPackage;

import java.math.BigDecimal;
import java.io.PrintStream;
import java.util.Scanner;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {

    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 euroTotal = usdTotal.multiply(new BigDecimal("1.13")).setScale(2, BigDecimal.ROUND_HALF_UP);

        calculateNotes(usdTotal, "USD");
        calculateNotes(euroTotal, "EURO");

        user.close();

        PrintStream output = new PrintStream("euro.txt");
        System.setOut(output);

    }

    private static void calculateNotes(BigDecimal total, String currency) {
        BigDecimal bills20 = total.divide(TWENTY, 0, BigDecimal.ROUND_DOWN);

        BigDecimal remainder10 = total.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 = total.setScale(2, BigDecimal.ROUND_DOWN).subtract(total.setScale(0, BigDecimal.ROUND_DOWN))
                .multiply(ONE_HUNDRED);

        System.out.println("CURRENCY : " + currency);
        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() + "\n");
    }
}
于 2019-02-17T15:53:38.810 回答