簡體   English   中英

在舍入小數的同時獲得不同的結果

[英]Different results are obtained while rounding decimals

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 )。

為什么會出現不一致的情況

您是否使用22/7作為PI的近似值? 因為22/73.142857142857...其中PI約為3.14159... 這解釋了您的舍入不一致性。

此處記錄了JVM中使用的PI的近似值。 根據JavaDoc ,它是:

pi更接近的

22/7PI近似值,它不精確,結果如此

幾乎完全脫離主題(及其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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM