String 无法转换为 double

String cannot be converted to double

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

字符串无法转换为双精度

格式说明符“%.0f”的无效值类型 'String',参数 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"是double,操作是String。 我以前没有这个错误,但过了一会儿它开始出错所以我添加了 String.valueOf(first + second); , 在它之前是 answer = first + second;但添加 valueOf 解决了这个问题。现在问题仍然存在 "result = String.format("%.0f", answer);"

您还需要将 answer 设为 double,因为您正在进行计算。只有在 display/formatting 阶段,您才应该转换为 String.

你应该只把计算部分放在if里面(即answer = first + secondanswer是一个double),然后把它转换成一个字符串来避免重复代码。

最后使用 equals()compare Strings,所以 operation.equals("+") 而不是 ==

使用 %.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

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

double result = first + second;

display.setText(String.valueOf(result));