为什么以下代码不会抛出Devide by Zero Exception?而是在Groovy中返回 Infinity 。
(((99.0f-0.0f)/(0.0f))*100).round(2)
答案 0 :(得分:2)
与Java相同。
重要的一点是Groovy如何将数字转换为对象并处理运算符。
1.0/0
抛出ArithmeticException
,因为数字在内部用作BigDecimal
的实例,而除法运算符实现为BigDecimal.divide(BigDecimal)
,它会抛出异常。
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
。