-3

我最近开始用Java编程,遇到了一个小问题:

我已经制作了一个 String to Double 线,但它似乎不能正常工作。如您所见,我要转换为 Double 的字符串是以下之一USDGPBEURO. 我知道您不能将文本转换为 Double,但我已经告诉 Java 字符串的值。

当我运行下面的程序时,我收到此错误:

线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“usd”在 sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at Valuta.main(Valuta.爪哇:22)

为什么会这样?

import java.util.Scanner;

public class Valuta {
    public static void main(String[] args){

        double euro, usd, gpb, done;

        Scanner input = new Scanner(System.in);

        euro = 7.46;
        usd = 5.56;
        gpb = 8.84;

        System.out.println("DKK to ??");
        System.out.println("USD,GPB or EURO?");
        String temp = input.nextLine();

        System.out.println("amount of dkk??");
        Double dkk = input.nextDouble();
        System.out.println("mhm");
        double donee = Double.parseDouble(temp);
        done = dkk*donee;
        System.out.println(done);
4

3 回答 3

1

我认为您想要的是能够将用户输入关联System.out.println("USD,GPB or EURO?");

    euro = 7.46;
    usd = 5.56;
    gpb = 8.84;

一种方法是创建这样的查找Map

Map<String, Double> lookUpMap = new HashMap<String, Double>(){{
put("EURO", new Double(7.46));
put("USD", new Double(5.56));
put("GPB", new Double(8.84));
}};

然后解析用户输入并查找Double值:

lookUpMap.get(userInput)
于 2013-11-12T16:40:43.077 回答
0

问题是您将货币解析为双重输入。这一行:

  double donee = Double.parseDouble(temp);

应为货币选择适当的转换系数。您可以使用简单的 if/else、地图或其他方式来做到这一点:

  double donee;
  if ("usd".equalsIgnoreCase(temp) {
      donee = usd;
  } else if ("gbp".equalsIgnoreCase(temp)) {
      donee = gbp;
  /* more cases ... */
  } else {
      throw new RuntimeException("unknown currency");
  }

您可能应该在获得数字输入之前其移至,因为如果它导致错误,则无论如何都无法处理数字输入。

于 2013-11-12T17:41:20.007 回答
0

你在这个程序中有几个问题。首先要解决您的错误,您需要为那里doubleUSD, GBP, and EURO变量名声明类型。其次,您将需要执行一个if else if else块来确定要进行的转换。

double total;
if(temp.equalsIgnoreCase("USD")){
  total = dkk*usd;
}else if(temp.equalsIgnoreCase("GBP"){
  total = dkk*gbp;
}else {
  total = dkk*euro;
}
System.out.println("This is your converted total " + total);

这将完成您希望它执行的转换。您还应该取出 Double.parseDouble(temp) 因为将该字符串转换为双精度对您没有帮助。

于 2013-11-12T21:28:47.853 回答