Расчетная библиотека - PullRequest
       9

Расчетная библиотека

1 голос
/ 03 ноября 2011

Мне нужно сделать некоторые вычисления, как это (упрощенно):

            amount1     amount2     amount3     amount4     total
            5000        500         1000        350         6850

3.55%       177.5       17.75       35.5        12.43       243.18
1.00%       50          5           10          3.5         68.5

-           4772.5      477.25      954.5       334.07      6538.32

16.66%      ....
...

Расчеты довольно просты;Но я не уверен, как мне лучше всего это реализовать.Мне нужно иметь возможность не только получать и показывать итоговые результаты расчетов, но и каждый дополнительный расчет.Я могу сделать метод для каждого подрасчета и сгруппировать методы в один для общего расчета.fe:

calcTotal1() {
    calcSub1() + calcSub2() + ... ;
}

Но мне было интересно, есть ли лучший способ реализовать это.Это также должна быть небольшая библиотека, которая может использоваться различными программами.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Я думаю, ваше требование может быть удовлетворено с помощью массива процентов для расчета:

 public BigDecimal[] calculate(BigDecimal[] percentages, BigDecimal amount) {
     BigDecimal rolling = amount;
     BigDecimal[] result = new BigDecimal[percentages.length];
     for (int i = 0; i < percentages.length; i++) {
        // We use null as a marker for subtotals
        if (percentages[i] != null) {
           result[i] = amount.multiply(percentages[i]).divide(new BigDecimal("100"), MathContext.DECIMAL128);
           rolling = rolling.add(result[i]);
        } else {
           // Insert the subTotal
           result[i] = rolling;
        }
     }

Обратите внимание на использование BigDecimal с, хотя они используют немного больше памяти, это серьезно повлияет на правильность ваших цифр.

Используя null s в процентах [], вы можете указать строки, в которых должны быть напечатаны промежуточные итоги.

1 голос
/ 03 ноября 2011

Пример - таблица, и таблицы лучше всего обрабатывать с помощью баз данных Если это только часть более крупной программы, вы можете использовать базу данных в памяти, такую ​​как SqlLite, HSql или любую другую реляционную базу данных.

Определите таблицу с разными столбцами, необходимыми для вычисления, с помощью оператора create table.

Затем заполните таблицу данными, используя оператор insert into. На этом этапе можно выполнить некоторые части расчета, например, ввести значения для процентов, которые должны рассчитываться в каждой ячейке вставленной строки данных.

Наконец получить данные, выполнив общее вычисление, используя оператор select from.

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

...