Javascript防止自动舍入

Javascript Prevent Automatic Rounding

本问题已经有最佳答案,请猛点这里访问。

我想知道是否有任何方法可以阻止javascript自动舍入我的数字。我用格雷戈里·莱布尼兹级数编制了一个计算圆周率的程序。它只到一定数量的小数点。这是我的代码:

1
2
3
4
5
6
7
8
9
10
pi=0;
x=1;
i=1;
function doStuff(){
    pi = pi+(4/x);
    x=x+2;
    pi = pi-(4/x);
    x=x+2;
    document.getElementById("someDiv").innerHTML = pi;
}


如果您试图处理需要精度超过javascript浮点(只有64位精度)的数字,您可以考虑使用类似于本问题中提到的库:是否有一个用于javascript的十进制数学库?

尤其是BigNumber库对于您的目的来说是有希望的。

下面是一个快速演示jfiddle:http://jsfiddle.net/h88ts/

请注意,小提琴正在BigNumber库中链接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$(document).ready(function () {

    BigNumber.config({ DECIMAL_PLACES : 50, ERRORS : false});

    var pi = new BigNumber(0, 10),
        x = new BigNumber(1, 10),
        two = new BigNumber(2, 10),
        four = new BigNumber(4, 10);

    function iterate() {
        pi = pi.plus(four.dividedBy(x));
        x = x.plus(two);
        pi = pi.minus(four.dividedBy(x));
        x = x.plus(two);
        $("#pi").text(pi.toPrecision(50));
    }

    $('button').click(iterate);
});

不幸的是,在计算上不可能阻止对具有无限小数位的数字进行舍入。

不过,有一些黑客可以建议,比如有一个类HugeNumber,它的对象是算法列表或数组,甚至是只包含数字的字符串,并在其中实现算术运算(当然是由您自己实现)。除非考虑到处理效率,否则这将是一个可接受的解决方案。也许类似的东西已经存在于一个插件中,甚至一些内置类中,我只是从来没有需要过,所以我真的不知道。