Java 为什么它显示NaN或0??这一行动显然没有';不给0

Java 为什么它显示NaN或0??这一行动显然没有';不给0,java,Java,回报率:0% 当我把它放在双倍的时候,它显示了NaN% 试试这个 divideFactorial(a,b)返回a!/b public static void main(String[] args) throws Exception { long d = (long) (1-(factorial(364) /factorial(365-12)*Math.pow(365,11)))*100; System.out.println(d+

回报率:0%

当我把它放在双倍的时候,它显示了NaN%

试试这个

divideFactorial(a,b)
返回
a!/b

    public static void main(String[] args) throws Exception {
    long d = (long) (1-(factorial(364)
                /factorial(365-12)*Math.pow(365,11)))*100;
    
    System.out.println(d+"%");
}

private static double factorial (int num) {
    if (num==0){
        return 1;
    }
    return num * factorial(num-1);
}

输出:

    long d = (long) ((1 - divideFactorial(364, 365 - 12) / Math.pow(365, 11)) * 100);
    System.out.println(d+"%");

factorial(364)
太大,无法放入双精度(最大正有限值为1.7976931348623157e+308)我有点新,如果我错了,请纠正我,但我应该将factorial方法的类型更改为long-right??long对您没有帮助。不用阶乘(364)/阶乘(365-12),只需将354和364之间的数字相乘。我不明白
    long d = (long) ((1 - divideFactorial(364, 365 - 12) / Math.pow(365, 11)) * 100);
    System.out.println(d+"%");
16%