当前位置: 首页 > 知识库问答 >
问题:

不兼容类型:从double到int的转换可能有损开关大小写[duplicate]

孙明德
2023-03-14

我是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);
    }

        }

共有1个答案

戚学文
2023-03-14

基本上,这个switch语句会导致问题:

switch(monthlySales){
    case 1:
        ...

它将monthlysalesdouble转换为int。由于double是64位浮点数,而int是32位整数,因此从doubleint的转换很可能不是无损的。

对于monthlySales使用int,这是我建议的解决方案,因为您可以简单地将单位从美元更改为美分,或者使用任何您正在计算的货币。
另一个选项是添加一个cast:开关((int)monthlySales){(不推荐使用,因为错误警告您的信息丢失相同-小数部分将简单地从值中删除,并且double可以保存比int大得多和小得多的值)。
最后但并非最不重要的一点:用if-else替换switch-

 类似资料: