使用双精度时替代if else语句

时间:2014-02-10 19:14:40

标签: java if-statement switch-statement

根据工资,我需要为员工对象分配一个特定的税率。工资由annualSalary定义,这是一个double,所以我不能使用switch语句。我改为使用if / else:

public int getSalaryRank() {
    if(yearlySalary <= 60000.00) {
        salaryRank = 1;
    } else if(yearlySalary > 60000.00 && yearlySalary <= 80000.00) {
        salaryRank = 2;
    } else if(yearlySalary > 80000.00 && yearlySalary <= 100000.00) {
        salaryRank = 3;
    } else if(yearlySalary > 100000.00 && yearlySalary <= 125000.00) {
        salaryRank = 4;
    } else {
        salaryRank = 5;
    } return salaryRank; }

我将根据排名稍后分配税率。有没有更好的方法来写这个?

4 个答案:

答案 0 :(得分:4)

考虑在列表或(薪水)限制数组中使用while循环。

答案 1 :(得分:3)

您可以像这样简化:

public int getSalaryRank() {
    int salaryRank;

    if(yearlySalary <= 60000.00) {
        return  1;
    } 

    if(yearlySalary <= 80000.00) {
        return 2;
    } 

    if(yearlySalary <= 100000.00) {
        return 3;
    } 

    if(yearlySalary <= 125000.00) {
       return 4;
    } 

    return 5

}

左侧的所有检查都是不必要的,因为语句是按顺序执行的。此外,您可以删除else语句并直接返回salaryrank。此外,当你处理钱时,永远不要使用浮点数。请改用BigDecimal

编辑:考虑到@ AlexWien关于多个退出点的评论,这可能是一个更好的解决方案:

public int getSalaryRank() {
        if(yearlySalary <= 60000.00) {
            salaryRank = 1;
        } else  if(yearlySalary <= 80000.00) {
            salaryRank = 2;
        } else if(yearlySalary <= 100000.00) {
            salaryRank = 3;
        } else if(yearlySalary <= 125000.00) {
           salaryRank = 4;
        } else {
           salaryRank = 5;
        }  

        return salaryRank;

    }

答案 2 :(得分:2)

怎么样:

public int getSalaryRank() 
{
    if(yearlySalary <= 60000.00) return 1;
    if(yearlySalary <= 80000.00) return 2;
    if(yearlySalary <= 100000.00) return 3;
    if(yearlySalary <= 125000.00) return 4;
    return 5;
}

答案 3 :(得分:2)

如果以前else中的任何一个是真的,您的程序将无法访问if语句。因此,您可以使用它,并省略以下内容:yearlySalary > 60000.00 &&

if(yearlySalary <= 60000.00) {
    salaryRank = 1;
} else if(yearlySalary <= 80000.00) {
    salaryRank = 2;
}

另外,双打不是特别精确。它们是浮点数,这意味着您无法准确保存例如0.1的值。仔细看看。 BigDecimal是一种更适合货币使用的类型。