当前位置:  开发笔记 > 编程语言 > 正文

BigDecimal部门正在逐步推进

如何解决《BigDecimal部门正在逐步推进》经验,为你挑选了1个好方法。

我正在尝试计算以下内容:

(1 - (1/365)) * (1 - (2/365) = 0.99727528617

我想存储整个小数.这是我的代码,但它给了我1的答案:

public BigDecimal probability(int t){
    BigDecimal probT; // holds our probability of a single (1-(t/365))
    BigDecimal result; // holds our result
    result = BigDecimal.ONE; // initialize result to 1

    // for 1 to t-1
    for (int n = 1; n < t; n++){            
        int numerator = n; // numerator the value of n

        int denominator = 365; // denominator 365 

        // numberator / denominator (round down)
        probT = BigDecimal.valueOf(numerator).divide(BigDecimal.valueOf(denominator), RoundingMode.DOWN);

        // 1-answer
        probT = BigDecimal.ONE.subtract(probT);

        // multiply the probabilities together 
        result = result.multiply(probT);

    }
    return result;
}

BigDecimal ans2 = bc.probability(3);
System.out.println("P(3) = " + ans2.toString());  

输出:

P(3) = 1

Tunaki.. 5

那是因为你正在计算的除法是用0表示的.引用方法divide(divisor, roundingMode)Javadoc:

返回BigDecimal其值为(this / divisor),且其比例为的值this.scale().

在这种情况下,this.scale()是指分子,其为0,因为分子是规模BigDecimal.valueOf(n),与n为整数.

您需要更改此分区才能使用,divide(divisor, scale, roundingMode)并指定所需的比例.



1> Tunaki..:

那是因为你正在计算的除法是用0表示的.引用方法divide(divisor, roundingMode)Javadoc:

返回BigDecimal其值为(this / divisor),且其比例为的值this.scale().

在这种情况下,this.scale()是指分子,其为0,因为分子是规模BigDecimal.valueOf(n),与n为整数.

您需要更改此分区才能使用,divide(divisor, scale, roundingMode)并指定所需的比例.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有