货币汇率java赋值



你好,我正在寻求家庭作业方面的帮助!因此提示如下:

编写一个程序,提示用户输入从美元到人民币的汇率。提示用户输入0将美元转换为人民币,输入1将人民币转换为美元。提示用户分别输入美元或人民币金额将其转换为人民币或美元。当用户输入"1"(元对美元)程序应该使用indexOf()和substring()方法提取小数点前的美元金额和小数点后的美分。以下是运行示例,用户的输入带下划线:

输入美元对人民币的汇率:6.81输入0将美元转换为人民币,输入1将美元转换成人民币:0输入美元金额:100100.0美元相当于681.0元人民币。输入美元对人民币的汇率:6.81输入0将美元转换为人民币,输入1将美元转换成人民币:1输入人民币金额:10001000.0元相当于146.843美元146美元三个季度0角硬币1镍4便士">

因此,我得到了我的代码,在它将钱分成美分到美分的价值之前,我要做所有的事情。这就是我的问题所在,我不知道如何使用十进制值(或美分)来显示每个值的数量。这是我的代码

import java.util.Scanner;
public class LabTask6 {
private static Scanner key = new Scanner(System.in);
public static void main(String[] args) {
// TODO Auto-generated method stub
double exchangeRate = 0;
int conversion;
double dollar = 0;
double yuan = 0;
String Dollar = " ";
int quarter = 0;

System.out.print("Enter the exchange rate from dollars to RMB: ");
exchangeRate = key.nextDouble();
System.out.print("Enter 0 to convert dollars to RMB or "
+ " 1 for RMB to dollars: ");
conversion = key.nextInt();

//while(conversion == 0 || conversion == 1) {
if(conversion == 0) {
System.out.print("Enter the dollar amount: ");
dollar = key.nextDouble();
yuan = dollar * exchangeRate;
System.out.println("$" + dollar + " is " + yuan + " yuan.");
System.out.println();
}else if(conversion == 1) {
System.out.print("Enter the Yuan amount: ");
yuan = key.nextDouble();
dollar = yuan / exchangeRate;
System.out.printf(yuan + " yuan is%8.3f dollars.", dollar);
System.out.println();
Dollar = dollar + "";
System.out.println(Dollar.substring(0, Dollar.indexOf(".")) + " dollars");
}
}
}

正如您所看到的,在第二个if语句中,我试图通过将数字转换为字符串并仅显示从index(0)到"的内容来获得"美元"金额烧焦然而,这对其他所需物品(如五分硬币、一角硬币、四分硬币和便士)不起作用。我最初的想法是做一个while循环,防止小数(美分)达到零,并增加被声明为变量的分数值,只要它们可以被分数值整除,即数字是126.47,我就会取47,看看它是否可以被25整除,然后如果结果>0,它就会把1加到四分之一,或者四分之一++。这带来了两个问题,一个是最终价值不会是47美分,另一个是我正试图从一开始就找出如何隔离和操纵这些美分的价值。我知道我写了一篇奇怪的文章,但我现在完全被难住了,我试图尽可能清楚,有人能帮我吗?

重述一下,我想打印美元、25美分、5美分、1美分和1美分的金额。但不知道是怎么回事。

这里有一些示例代码供您查看。请注意,我将Dollar变量重命名为dollarStr,因为根据Java命名惯例,变量不应该以大写字母开头。我还想指出,ajb是非常正确的,因为使用double来表示货币不是一个好主意。然而,由于这是一项简单的家庭作业,我怀疑这对你来说会是个问题。

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
...
public static void main(String[] args){
//omitting extra code to shorten the answer
...
}else if(conversion == 1) {
System.out.print("Enter the Yuan amount: ");
yuan = key.nextDouble();
dollar = yuan / exchangeRate;
System.out.printf(yuan + " yuan is%8.3f dollars.", dollar);
System.out.println();
dollarStr = String.valueOf(dollar);
System.out.println(dollarStr.substring(0, dollarStr.indexOf(".")) + " dollars");
//Get the "cents" part of the converted value
String centsStr = dollarStr.substring(dollarStr.indexOf("."));
//Convert the value into a double
double cents = Double.parseDouble(centsStr);
//Multiplying by 100 so that something like 0.173 dollars 
// becomes 17.3 cents
cents *= 100;
//Assuming you want to round to nearest penny, 
//  but it's unclear from your question if this is correct.
cents = Math.round(cents); 
//quick and dirty conversion of the rounded cents to an integer value
int change = (int) cents;
//For demonstration purposes, feel free to remove it.
System.out.println(cents+ " cents");
//Calculate how many of each kind of coin and display results.
Map<Coin, Integer> changeMap = makeChange(change);
for(Coin coin: changeMap.keySet()){
int numCoins = changeMap.get(coin);
System.out.print(numCoins +" "+ (numCoins != 1 ? coin.getPlural() : coin.name().toLowerCase())+" ");
}
System.out.print("n");
}
}
//Calculates the number of each kind of Coin to use
// in order to make the specified amount of change.
public static Map<Coin,Integer> makeChange(int cents){
Map<Coin,Integer> results = new HashMap<>();
for(Coin coin: Coin.values()){
int numCoins = cents/coin.getValue();
cents = cents % coin.getValue();
results.put(coin, numCoins);
}
return results;
}

以下是与上述代码一起使用的Coin枚举:

public enum Coin {
QUARTER(25, "quarters"), DIME(10, "dimes"), NICKEL(5, "nickels"), PENNY(1, "pennies");
private int value;
private String plural;
private Coin(int val, String plur){
value = val;
plural = plur;
}
public int getValue(){
return value;
}
public String getPlural(){
return plural;
}
}

如果您对枚举感到不舒服,那么可以将其转换为传统类,并定义一些常量。

你仍然需要担心的一些事情是:

  1. 彻底测试代码
  2. 处理错误的用户输入-负数、字符串而不是数字等

最新更新