我有一个双精度变量(employeeSalary),我想检查这个值是否大于(>)零(0)。我可以想到一种非常幼稚的方式来编写此代码,但我不确定对于double数据类型,这是否是正确的编写方式。
if(employeeSalary > 0){
// Employee salary is greater than zero.
}else{
// Employee salary is less than or equal to zero.
}
请问这种方法可行吗?
我有一个双精度变量(employeeSalary),我想检查这个值是否大于(>)零(0)。我可以想到一种非常幼稚的方式来编写此代码,但我不确定对于double数据类型,这是否是正确的编写方式。
if(employeeSalary > 0){
// Employee salary is greater than zero.
}else{
// Employee salary is less than or equal to zero.
}
请问这种方法可行吗?
如果您只想比较基本类型,可以尝试如下代码:
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)
employeeSalary > 0.0
比employeeSalary > 0
更好?你为什么建议使用Double.compare(employeeSalary, Double.valueOf(0.0)) > 0
?Double.compare
方法与>
运算符的语义略有不同,所以如果你认为有必要的话,应该解释清楚它们之间的区别,否则不建议使用。而且通过Double.valueOf(0.0)
将第二个参数装箱,然后立即自动拆箱,完全没有意义。 - Holgerdouble
类型的数值时,使用>
或<
是没有问题的,但有一些需要注意的地方。你的代码应该能够完美运行。==
可能存在许多特殊情况。例如,一个看似为0
的数字实际上不是(例如-0.0
),而另一个数字虽然接近于零但比较== 0
会失败(例如0.0000...001
)。因此要小心使用==
。
Double.compare(employeeSalary, 0.0) > 0
,或者如果你担心0 != 0.0
,那么就直接使用employeeSalary > 0.0
。 - EdgeCaseBerg>
的含义与预期完全相同,当employeeSalary
大于0时,employeeSalary > 0
为true
。当然,当employeeSalary==0.000000000000000000000000001
时,条件也得到满足,但如果employeeSalary
比这个数字短0.000000000000000000000000001
,则条件不成立。请问自己这种差异是否真的很重要,并得出结论:永远不要使用double
来表示薪水。 - Holger