在舍入小数的同时获得不同的结果

时间:2011-05-19 09:29:04

标签: java bigdecimal

double radius = 5;
double area = Math.PI * Math.pow(radius, 2);            
// System.out.println(area);

BigDecimal bd = new BigDecimal(area).setScale(2, HALF_UP);
// BigDecimal bd = new BigDecimal(area).setScale(2, ROUND_HALF_UP);
System.out.println(bd.toString());

上面的输出打印为78.54,但是如果我通过计算器(windows calc接口)执行相同的操作,则输出为78.57(即22/7 * 25)。

为什么会出现不一致

3 个答案:

答案 0 :(得分:20)

您是否使用22/7作为PI的近似值?因为22/73.142857142857...,其中PI约为3.14159...。这解释了你的舍入不一致。

JVM中使用的PI的近似值记录为here。根据{{​​3}},它是:

  

pi pi

答案 1 :(得分:6)

22/7PI近似,不完全相同,结果

答案 2 :(得分:1)

几乎完全脱离主题(及其javascript)。但它仍然是一个有趣的答案,实际上可以明显地看到PI被计算出来。

这种方法在计算PI时显然超级超慢...但是看起来很有趣。

(function (t) {
    (function () {
        var a = 0,
            b = 1,
            d = 4,
            c = ~1e9;
        (function p() {
            if (!t) {
                return;
            }
            b -= 2;
            a -= d / b;
            d = -d;
            if (++c % 2000 === 0) {
                t.innerHTML = a;
                setTimeout(p, 13);
            } else {
                if (c) {
                    p();
                } else {
                    t.innerHTML = a;
                }
            }
        }());
    }());
}(document.getElementById("someplace-to-hold-the-calculation")))

Philippe Leybaert设置JSBin for it