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 + second
,answer
是一个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));
我正在尝试用 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 + second
,answer
是一个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));