fro*_*die 68 java double types integer divide-by-zero
我有代码来计算2个数字之间的百分比差异(oldNum - newNum) / oldNum * 100;- 其中两个数字都是doubles.我希望在oldNum为0的情况下添加某种检查/异常处理.但是,当我为oldNum和newNum进行了值为0.0的测试运行时,执行继续,好像什么都没发生并且没有抛出错误.使用ints 运行此代码肯定会导致算术除零异常.为什么Java在涉及到doubles 时会忽略它?
Kri*_*ris 46
从数学上讲,除以零的结果是未定义的,可以用浮点数/双精度表示(NaN不是数字),但在任何基本意义上都不是错误的.
由于整数必须包含特定的数值,因此在处理它们时必须将除以零的错误抛出.
除以零时(0 或 0.00)
如果将 double 除以 0,JVM 将显示Infinity。
public static void main(String [] args){ double a=10.00; System.out.println(a/0); }
安慰:
Infinity
如果将 int 除以 0,则 JVM 将抛出算术异常。
public static void main(String [] args){
int a=10;
System.out.println(a/0);
}
安慰: Exception in thread "main" java.lang.ArithmeticException: / by zero
但是如果我们将 int 除以 0.0,那么 JVM 将显示 Infinity:
public static void main(String [] args){
int a=10;
System.out.println(a/0.0);
}
安慰: Infinity
这是因为 JVM 会自动将 int 类型转换为 double,所以我们得到的是无穷大而不是 ArithmeticException。
存储double的方式与int完全不同.有关Java如何处理双重计算的更详细说明,请参见http://firstclassthoughts.co.uk/java/traps/java_double_traps.html.您还应该阅读浮点数,特别是非数字(NaN)的概念.
如果您有兴趣了解有关浮点表示的更多信息,我建议您阅读本文档(Word格式,抱歉).它深入研究数字的二进制表示,这可能有助于您的理解.
| 归档时间: |
|
| 查看次数: |
48280 次 |
| 最近记录: |