0
なぜこの下のコードでゼロ除算で除算がスローされないのですか?むしろGroovyではInfinityを返します。なぜゼロ除算で除算しないのですか?
(((99.0f-0.0f)/(0.0f))*100).round(2)
なぜこの下のコードでゼロ除算で除算がスローされないのですか?むしろGroovyではInfinityを返します。なぜゼロ除算で除算しないのですか?
(((99.0f-0.0f)/(0.0f))*100).round(2)
これはJavaの場合と同じです。
重要な点は、Groovyが数値をオブジェクトに変換して演算子を処理する方法です。数値が内部BigDecimal
のインスタンスとして使用され、除算演算子が例外をスローBigDecimal.divide(BigDecimal)
として実装されているようにGroovyで
1.0/0
は、ArithmeticException
をスロー。数字は内部として明示的に要求Float
のインスタンスとして使用され、従って、除算演算子はInfinity
を返す標準的なJava /
あるとして、Javaのよう
1f/0f
は、Infinity
を返します。
はArithmeticException
、第二リターンInfinity
をスローするJava
System.out.println(new BigDecimal(1f).divide(new BigDecimal(0f)));
System.out.println(1f/0f);
最初のもの二行と比較してください。