Деление и округление BigInteger - PullRequest
       22

Деление и округление BigInteger

1 голос
/ 20 февраля 2012

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

Особенности: - Получил коллекцию, в которой есть BigIntegers - Получил еще одну коллекцию BigIntegers - Получил третью коллекцию Больших целых - Мне нужно создать коллекцию, которая имеет среднее значение из трех вышеупомянутых коллекций, а значения округляются до 2 десятичных знаков. т.е. если collection1 имеет {2,3,4} и collection2 имеет {4,5,5}, а collection3 имеет {5,3,2}, я должен создать 4-ую коллекцию, которая имеет {3.67,3.67,, 3.67}

Для этого я использую этот код:

     BigInteger divisor = new BigInteger(3.0d);
     var averages = collection1.Zip(collection2, BigInteger.Add)
                    .Zip(collection3, 
                    (xy, z) => BigInteger.Divide(BigInteger.Add(xy,z), divisor));

Однако десятичные дроби не отображаются. Я не уверен, может ли biginteger содержать только целочисленные значения, а не десятичные.

Можете ли вы предложить решение для этого?

Примечание: он должен быть основан на LINQ, так как коллекции довольно большие с некоторыми большими значениями (и, следовательно, biginteger).

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Ну, вы не получаете никаких десятичных значений, потому что BigInteger представляет только целые числа .

Достаточно ли decimal, чтобы вместить интересующее вас число?

Если нет, вы можете рассмотреть возможность умножения всего на 100 и исправления стороны форматирования таким образом, чтобы «1500» отображалось как «15,00» и т. Д. Вам все равно придется проделать небольшую работу, чтобы закончить с".67" вместо ".66" для результата в две трети, поскольку это будет естественным результатом деления, когда оно усечено вместо округленного.

0 голосов
/ 18 декабря 2013

Остаток после деления на три будет равен .00, .33 или .67. Вы должны быть в состоянии определить, какое из этих трех значений подходит. Однако я не уверен, как вы захотите, чтобы вещи в вашем собрании сохранялись, учитывая, что числовые типы, поддерживающие дроби, не смогут содержать ваш результат, если вы не захотите определить тип «большое целое плюс малая дробь» или сохраните свои числа в виде строк.

...