1

我想知道是否有任何方法来阻止javascript自动舍入我的号码。我使用Gregory-Leibniz系列制作了一个计算pi的程序。它只会达到一定的小数位数。这里是我的代码:Javascript阻止自动舍入

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; 
} 
+1

它只能达到一定的小数位数,因为它只有*有一定的小数位数。换句话说,JavaScript数学的精度有限。 – Pointy

回答

1

如果你想与要求精度超越的JavaScript浮动(仅限64位精度),你可以考虑使用一个图书馆想在这个问题中提及的一个数字来工作:Is there a decimal math library for JavaScript?

特别是bignumber库看起来很有希望达到您的目的。

这里是一个快速演示的jsfiddle:http://jsfiddle.net/H88tS/

注意,小提琴在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); 
}); 
0

不幸的是,它的计算不可能防止一些四舍五入与潜在的无限小数。

虽然有一些黑客可以提出建议,就像拥有一个HugeNumber类,它们的对象是列表或字符串数​​组,甚至包含数字的字符串,并且在其中实现了算术运算(当然,您自己) 。除非处理效率是一个问题,否则这将是一个可接受的解决方案。也许像这样的东西已经存在于一个插件甚至是一些内置的类中,我只是从来没有需要,所以我真的不知道。