我是Java语言的初学者,我遇到的问题是“不兼容的类型:从double到int的可能有损转换”。我该怎么做才能解决这个问题?我完全失去了它。
import javax.swing.*;
import java.text.*;
public class CalculateIncome{
public static void main(String[]args){
String s1, outMessage;
double monthlySales, income;
DecimalFormat num = new DecimalFormat(",###.00");
s1 = JOptionPane.showInputDialog("Enter the value of monthly sales:");
monthlySales = Double.parseDouble(s1);
switch(monthlySales) {
case 1:
income = 200.00+0.03*monthlySales;
break;
case 2:
income = 250.00+0.05*monthlySales;
break;
case 3:
income = 300.00+0.09*monthlySales;
break;
case 4:
income = 325.00+0.12*monthlySales;
break;
case 5:
income = 350.00+0.14*monthlySales;
break;
case 6:
income = 375.00+0.15*monthlySales;
default:
outMessage = ("For the monthly sales of $" +num.format(monthlySales)+ "\nThe income is"+num.format(income));
}
JOptionPane.showMessageDialog(null,outMessage,"QuickTest Program 5.5b", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
答案 0 :(得分:1)
基本上这个switch语句会导致问题:
switch(monthlySales){
case 1:
...
它将monthlySales
从double
转换为int
。由于double
是64位浮点数,而int
是32位整数,因此从double
到int
的转换很可能不是无损的。
对int
使用monthlySales
,这是我建议的解决方案,因为您可以简单地将单位从美元更改为分,或者您计算的任何货币。
另一个选择是添加一个演员:switch((int) monthlySales){
(不推荐,由于错误警告你的信息丢失相同 - 小部分将简单地从值中删除,而double可以保持更大和更小的方式值比int
)
最后但并非最不重要:用switch
替换if-else
- 语句,并与双倍if(monthlySales == 1.0)...
进行比较。
答案 1 :(得分:1)
在Java语言中,switch
表达式允许int
数据类型。
在提供其他数据类型时,将尝试自动将值提升为int。由于您提供的类型为double
,因此它会被转换为int,因此会发出警告。
double monthlySales, income;
switch(monthlySales) {
每月销售参数将是一个整数,除非正在捕获金额或类似数量。我建议
int monthlySalesInt = 0;
try {
int monthlySalesInt = Integer.parseInt(monthlySales);
}catch(NumberFormatException e) {
//exception handling - either wrap and rethrow, or warn using JDialog.
}
switch(monthlySalesInt) {
...