我正在尝试使用Java制作计算器,一切正常,直到出现此错误: 不兼容的类型:
字符串无法转换为double
无效的值类型'字符串'对于格式说明符'%。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));
}
}
变量"第一","第二"和"结果"是双打,操作是字符串。 我以前没有这个错误,但过了一段时间它开始出错了所以我添加了String.valueOf(第一个+第二个); ,在它回答之前=第一个+第二个;但添加valueOf固定。现在问题依然存在于" result = String.format("%。0f",answer);"
答案 0 :(得分:1)
由于您正在进行计算,因此您也希望answer
成为double
。它仅适用于您应转换为String
的显示/格式化阶段。
您应该只将计算部分放在if
内(即answer = first + second
,answer
为double
),然后将其转换为字符串以避免重复代码。
最后使用equals()
到compare Strings,operation.equals("+")
而非==
。
答案 1 :(得分:1)
使用%.0f
作为String格式化程序的参数,您需要传递一个数字(浮点数),但在您的代码段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
答案 2 :(得分:1)
如果结果是双数据类型
double result = first + second;
display.setText(String.valueOf(result));