我有一些像这样的代码:
class Foo {
public double x;
}
void test() {
Foo foo = new Foo();
// Is this a valid way to test for zero? 'x' hasn't been set to anything yet.
if (foo.x == 0) {
}
foo.x = 0.0;
// Will the same test be valid?
if (foo.x == 0) {
}
}
Run Code Online (Sandbox Code Playgroud)
我基本上希望将来避免被零除的例外.
谢谢
Wil*_*son 47
未明确初始化时,类范围中的数字基元初始化为零.
必须显式初始化本地范围中的数字基元(方法中的变量).
如果你只是担心除零除外,那么检查你的双精度是不正确的,效果很好.
if(value != 0)
//divide by value is safe when value is not exactly zero.
Run Code Online (Sandbox Code Playgroud)
否则,检查时,如果一个浮点值等double或float为0时,用于检测该值是否接近0的误差阈值,但不是很 0.
public boolean isZero(double value, double threshold){
return value >= -threshold && value <= threshold;
}
Run Code Online (Sandbox Code Playgroud)
是; 所有原始数字类型默认为0.
但是,涉及浮点类型(计算double和float)可以是不精确的,所以它通常是更好地检查它是否接近到0:
if (Math.abs(foo.x) < 2 * Double.MIN_VALUE)
Run Code Online (Sandbox Code Playgroud)
您需要选择误差范围,这并不简单.
在 Java 中,0 与 0.0 相同,doubles 默认为 0(尽管许多人建议始终明确设置它们以提高可读性)。我已经检查过foo.x == 0,并foo.x == 0.0都为true,如果foo.x是零
| 归档时间: |
|
| 查看次数: |
101652 次 |
| 最近记录: |