0

我正在尝试用Java制作一个计算器,一切正常,直到出现这个错误:不兼容的类型:

字符串不能转换为双精度

格式说明符“%.0f”,参数 1 的值类型“字符串”无效

这是脚本:

private void btnResultActionPerformed(java.awt.event.ActionEvent evt) {                                     
    String answer;

    second = Double.parseDouble(display.getText()); // The second number to count
    if (operation == "+") {
        answer = String.valueOf(first + second);
        result = String.format("%.0f",answer);
        display.setText(String.valueOf(result));
    } else if (operation == "-") {
        answer = String.valueOf(first - second);
        result = String.format("%.0f",answer);
        display.setText(String.valueOf(result));
    } else if (operation == "*") {
        answer = String.valueOf(first * second);
        result = String.format("%.0f",answer);
        display.setText(String.valueOf(result));
    } else if (operation == "/") {
        answer = String.valueOf(first / second);
        result = String.format("%.0f",answer);
        display.setText(String.valueOf(result));
    }

}   

变量“first”、“second”和“result”是双精度数,操作是字符串。我以前没有这个错误,但过了一段时间它开始出错,所以我添加了 String.valueOf(first + second); , 之前是 answer = first + second; 但添加 valueOf 解决了这个问题。现在问题仍然存在于 "result = String.format("%.0f", answer);"

4

3 回答 3

1

你也想做answer一个double,因为你在做计算。它只是在显示/格式化阶段,您应该转换为String.

您应该只将计算部分放在if(即answer = first + secondanswer作为 a double)中,然后将其转换为 String 以避免重复代码。

最后equals()用来比较 Strings,sooperation.equals("+")和 not ==

于 2017-05-16T10:14:35.703 回答
1

作为%.0f字符串格式化程序的参数,您需要传递一个数字(浮点数),但在您的代码段answer中当前是一个字符串。

您可以%s在格式化程序中使用字符串,或者(更好)将操作结果作为第二个参数作为浮点数而不是字符串传递

恢复 :

String answer = "1";
System.out.println( String.format("%.0f",answer) ); // Throws an exception


double answer = 1.d;
System.out.println( String.format("%.0f",answer) ); // Prints 1
于 2017-05-16T10:21:28.647 回答
1

如果结果是双精度数据类型

double result = first + second;

display.setText(String.valueOf(result));
于 2017-05-16T10:25:02.163 回答