计算库

时间:2011-11-03 08:39:02

标签: java calculated-columns

我需要做一些这样的计算(简化):

            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%      ....
...

计算非常简单;但我不确定我最好如何实现这一点。 我不仅需要能够从计算中获取并显示总结果,还需要每个子计算。 我可以将每个子计算和组方法的方法合在一起进行总计算。 f.e:

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

但我想知道是否有更好的方法来实现这一点。 它也应该是一个可以被不同程序使用的小库。

2 个答案:

答案 0 :(得分:2)

我认为,您的要求可以很好地满足一系列要计算的百分比:

 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 s的使用,虽然它们会占用更多内存,但会严重影响数据的正确性。

在百分比[]中使用null s,您可以指定必须打印小计的行。

答案 1 :(得分:1)

示例是一个表,表最好用数据库处理。如果这只是较大程序的一部分,则可以使用内存数据库,如SqlLite,HSql或任何其他关系数据库。

使用create table语句定义具有计算所需的不同列的表。

然后使用insert into语句使用数据填充表。计算的某些部分可以在此阶段完成,例如输入应在插入的数据行的每个单元格上计算的百分比值。

最后使用select from语句检索进行总计算的数据。

通过明确使用数据库表,您的解决方案将更具可读性,意图将更好地传达,整体解决方案将跨越更少的代码行。