检查double值是否大于零的简单方法

3

我有一个双精度变量(employeeSalary),我想检查这个值是否大于(>)零(0)。我可以想到一种非常幼稚的方式来编写此代码,但我不确定对于double数据类型,这是否是正确的编写方式。

if(employeeSalary > 0){
  // Employee salary is greater than zero.
}else{
  // Employee salary is less than or equal to zero.
}

请问这种方法可行吗?


4
你试过了吗?有效吗? - OldCurmudgeon
2
当然可以运行。 - Qianyue
1
这应该可以工作,但如果你真的想要完全冗长的Java代码,你可以使用静态方法 Double.compare(employeeSalary, 0.0) > 0,或者如果你担心 0 != 0.0,那么就直接使用 employeeSalary > 0.0 - EdgeCaseBerg
在正常情况下,运算符>的含义与预期完全相同,当employeeSalary大于0时,employeeSalary > 0true。当然,当employeeSalary==0.000000000000000000000000001时,条件也得到满足,但如果employeeSalary比这个数字短0.000000000000000000000000001,则条件不成立。请问自己这种差异是否真的很重要,并得出结论:永远不要使用double来表示薪水。 - Holger
2个回答

4

如果您只想比较基本类型,可以尝试如下代码:

if(employeeSalary > 0.0){
  // Employee salary is greater than zero.
}else{
  // Employee salary is less than or equal to zero.
}

请注意,如果employeeSalary是一个双精度(基本)类型,则应该与其他双精度类型进行比较,而不是与整数进行比较。

您还可以使用一些Double静态方法来完成相同的操作。

// assuming employeeSalary is a double

    if(Double.compare(employeeSalary, Double.valueOf(0.0)) > 0 ){
          // Employee salary is greater than zero.
        }else{
          // Employee salary is less than or equal to zero.
        }

请查看:https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#compare(double,%20double)


该链接是关于Java中比较两个双精度浮点数的方法的文档。

2
为什么employeeSalary > 0.0employeeSalary > 0更好?你为什么建议使用Double.compare(employeeSalary, Double.valueOf(0.0)) > 0Double.compare方法与>运算符的语义略有不同,所以如果你认为有必要的话,应该解释清楚它们之间的区别,否则不建议使用。而且通过Double.valueOf(0.0)将第二个参数装箱,然后立即自动拆箱,完全没有意义。 - Holger

3
比较double类型的数值时,使用><是没有问题的,但有一些需要注意的地方。你的代码应该能够完美运行。
然而,使用==可能存在许多特殊情况。例如,一个看似为0的数字实际上不是(例如-0.0),而另一个数字虽然接近于零但比较== 0会失败(例如0.0000...001)。因此要小心使用==

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接