我需要做一些这样的计算(简化):
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() + ... ;
}
但我想知道是否有更好的方法来实现这一点。 它也应该是一个可以被不同程序使用的小库。
答案 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
语句检索进行总计算的数据。
通过明确使用数据库表,您的解决方案将更具可读性,意图将更好地传达,整体解决方案将跨越更少的代码行。