代码没有返回足够大的十进制数

时间:2015-11-15 22:41:38

标签: java

 public static double jackpotChance(int k, int highestNumber, int m)
    {
        long temp = 1;
        long tempK = 1;
        for(int i = 0; i < k; i++)
        {
            temp = temp * (highestNumber-i);
            System.out.println(temp);
        }
        for(int u = 0; u < k; u++)
        {
            tempK = tempK * (k-u);
            System.out.println(tempK);
        }
        double jackpotChance;
        jackpotChance = (temp/tempK)*m;
        return jackpotChance;
    }

对于highestNumber来说,高于~30将给出一个错误的临时数,因此给了我一个关于jackpotChance的错误号码。我在java.math类中听说过BigNumber,我尝试使用它,但由于某种原因它不会让我转换到数字类型之间。任何建议将不胜感激。是的,这是一个家庭作业问题,所以如果你能给出建议而不给出非常好的答案,那么谢谢你。)

编辑:添加BigInteger以供参考。我得到的错误是它无法将1转换为BigInteger。

 public static BigInteger jackpotChance(int k, int highestNumber, int m)
    {
        BigInteger temp = 1;
        BigInteger tempK = 1;
        for(int i = 0; i < k; i++)
        {
            temp = temp * (highestNumber-i);
            System.out.println(temp);
        }
         for(int u = 0; u < k; u++)
        {
            tempK = tempK * (k-u);
            System.out.println(tempK);
        }
        BigDecimal jackpotChance;
        jackpotChance = (temp/tempK)*m;
        return jackpotChance;
    }

2 个答案:

答案 0 :(得分:1)

你为什么不为临时和节奏使用双打?那样可以解决你的问题。

答案 1 :(得分:0)

使用大数字,我认为如果你不使用小数,最好的选择是使用BigInteger

它有一个特殊的BigInteger#multiply方法可以解决您的问题。

不要忘记BigInteger对象是不可变的,因此在对它执行操作时,不要忘记将其值赋给变量。

实施例

BigInteger big = new BigInteger("10");
big = big.multiply(new BigInteger("20")); // value of big = 200;