Javascript предотвращает автоматическое округление

Мне было интересно, есть ли способ предотвратить автоматическое округление 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;
}

person user3334397    schedule 20.02.2014    source источник
comment
Он подходит только к определенному количеству знаков после запятой, потому что он имеет только определенное количество знаков после запятой. Другими словами, математика JavaScript имеет конечную точность.   -  person Pointy    schedule 20.02.2014


Ответы (2)


Если вы пытаетесь работать с числами, требующими точности за пределами числа с плавающей запятой JavaScript (только 64-битная точность), вы можете рассмотреть возможность использования библиотеки, подобной одной из упомянутых в этом вопросе: Есть ли библиотека десятичной математики для 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);
});
person Jason Aller    schedule 20.02.2014

К сожалению, вычислительно невозможно предотвратить округление числа с потенциально бесконечным числом десятичных разрядов.

Однако можно предложить несколько приемов, например, иметь класс HugeNumber, объектами которого являются списки или массивы алгаризмов, или даже строки, содержащие только числа, и реализовать в нем арифметические операции (конечно, самостоятельно). Если эффективность обработки не является проблемой, это было бы приемлемым решением. Может быть, что-то подобное уже существует в плагине или даже в каком-то встроенном классе, просто мне это никогда не нужно, поэтому я действительно не знаю.

person lucasnadalutti    schedule 20.02.2014