Java EXP4J:阶乘的正确优先级?

时间:2016-02-19 12:07:09

标签: java parsing

我正在使用文档的股票因子运算符,如下所示:

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^(2)!当预期答案为25时,它会返回1.55e25。它需要2作为其参数,而不是权力的最终答案。

我试着搞乱优先权,但似乎没有任何区别。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对我来说似乎正确。 5 ^ 2!应该是25,应该是5 ^(2)!

Google确认了这两项。

也许您是说(5 ^ 2)!代替?那应该解决它。

我不知道将括号放在单个数字周围会改变操作顺序的任何情况。