diff --git a/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt b/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt index c0553397..6da0b407 100644 --- a/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt +++ b/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt @@ -93,6 +93,8 @@ internal fun BigDecimal.factorial(): BigDecimal { if (this < BigDecimal.ZERO) throw ExpressionException.FactorialCalculation() if (this > maxFactorial) throw ExpressionException.TooBig() + if (this.compareTo(BigDecimal.ZERO) == 0) return BigDecimal.ONE + var expr = this for (i in 1 until this.toInt()) { expr *= BigDecimal(i) diff --git a/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt b/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt index e394f36b..03419438 100644 --- a/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt +++ b/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt @@ -108,4 +108,7 @@ class ExpressionSimpleTest { @Test fun expression28() = assertExpr("e", "2.7182818285") + + @Test + fun expression29() = assertExpr("0!", "1") }