为什么不能分为零例外?

时间:2016-05-10 10:45:18

标签: exception groovy logic

为什么以下代码不会抛出Devide by Zero Exception?而是在Groovy中返回 Infinity

(((99.0f-0.0f)/(0.0f))*100).round(2)​

1 个答案:

答案 0 :(得分:2)

与Java相同。
重要的一点是Groovy如何将数字转换为对象并处理运算符。

Groovy中的

1.0/0抛出ArithmeticException,因为数字在内部用作BigDecimal的实例,而除法运算符实现为BigDecimal.divide(BigDecimal),它会抛出异常。

Groovy中的

1f/0f与Java一样返回Infinity,因为数字在内部用作Float的实例,因为显式请求,因此除法运算符是标准Java {{1}返回/

与Java中的这两行比较

Infinity

第一个将抛出System.out.println(new BigDecimal(1f).divide(new BigDecimal(0f))); System.out.println(1f/0f); ,第二个将返回ArithmeticException