Javascript防止自动取整

Javascript防止自动取整,javascript,rounding,precision,floating-point-precision,arbitrary-precision,Javascript,Rounding,Precision,Floating Point Precision,Arbitrary Precision,我想知道是否有任何方法可以防止javascript自动将我的数字四舍五入。我用Gregory Leibniz级数编制了一个计算pi的程序。它只有一定的小数位数。这是我的密码: 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自动将我的数字四舍五入。我用Gregory Leibniz级数编制了一个计算pi的程序。它只有一定的小数位数。这是我的密码:

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位精度),你可以考虑使用一个库,就像这个问题中提到的一个:

特别是,该库对于您的目的来说很有希望

下面是一个JSFIDLE的快速演示:

注意,fiddle正在bignumber库中链接

$(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
,其对象是algarism的列表或数组,甚至是只包含数字的字符串,并在其中实现算术运算(当然是自己实现的)。除非考虑处理效率,否则这将是一个可接受的解决方案。可能类似的东西已经存在于一个插件中,甚至在某个内置类中,我从来都不需要它,所以我真的不知道。

它只有一定数量的小数位,因为它只有一定数量的小数位。换句话说,JavaScript数学具有有限的精度。