我有以下阶乘运营商宣称:EXP4J:不能得到很好的阶乘运营工作
Operator factorial = new Operator("!", 1, true, Operator.PRECEDENCE_POWER + 1) {
@Override public double apply(double... args) {
final long arg = (long) args[0];
if ((double) arg != args[0]) {
throw new IllegalArgumentException("Operand for factorial has to be an integer");
}
if (arg < 0) {
throw new IllegalArgumentException("The operand of the factorial can not " +
"be " +
"less than zero");
}
double result = 1;
for (int i = 1; i <= arg; i++) {
result *= i;
}
return result;
}
};
所以,它工作正常,当你有简单的表达式,如5!
等,但做起事情来当您尝试模拟正常的计算器行为时会中断。下面的例子将引发IllegalArgumentException()
:
5!+5
为什么?我想这与2个相邻的操作员或某事有关,因为使用(5!)+5
没有问题。
这对我正在进行的项目具有破坏性。有人建议将操作符转换为函数,但这会花费太多时间。我试着改变所有的构造参数,但没有一个改变了这个问题。
打开此问题:https://github.com/fasseg/exp4j/issues/62 – fasseg