天天看点

BigDecimal也要警惕除零异常

 在升级维护老代码的过程中,一次偶然的机会发现了一个抛出除零异常的问题。我用了偶然这个词,因为原来的代码已经成功运行了将近一年多了,出现这种问题的可能性非常小,既然碰到了,就深究一下。

您说对了,写得越长,越复杂的代码越容易产生缺陷。上面就是明证,虽然这个bug,没有产生什么损失,可是,要是这个代码是火箭发射的代码,而出现问题的几率是万分之一,而这万分之一的机会,赶巧被碰上了,那火箭发射可就失败了。这脸可就丢大了。扯远了。。。回到正题来。

先附上异常日志:

抛异常的那一行,正是红色底纹那一行。

原来代码的作者认为,有了这句代码:

的保护,后面执行:

这句,就应该不会遭遇除零异常。可是,错了,我自己写了一个小小的测试代码:

发现,正是会抛出除零异常。

修改方法也很简单,将除运算尽量转换成等价的乘运算(总之,尽量减少除运算),看下面代码:

本来,在一句代码中写老长的表达式运算,就不是好的编程风格。看我改写后,代码漂亮多了吧,最最关键的是缺陷解决了。呵呵

继续阅读