好的,所以我有以下问题,最好用一个具体的例子来解释。
给定一个双精度数x(例如100.5)和整数y(例如3),我如何将其拆分为(大致相等)部分,并返回包含33、33和34.5的List。
我希望列表中的所有元素都是整数(整数),最后一个除外。
当前代码:
private List<Double> splitIntoApproxEqualParts(double number, int numParts) {
List<Double> result = new ArrayList<Double>();
if (numParts <= 0) { return result; }
double qty = Math.floor(number / numParts);
for (int i = 0; i < numParts - 1; i++) {
result.add(qty);
}
result.add(qty + 1);
return result;
}
显然,这对于numParts
最优雅的方法是什么?
最佳答案
我认为您几乎有一个完整的解决方案,为一个零件添加一个处理程序,然后使用您现有的qty
(但从最后一个条目的原始number
中减去它)。就像是,
private static List<Double> splitIntoApproxEqualParts(double number, int numParts) {
if (numParts <= 0) {
return Collections.emptyList();
} else if (numParts == 1) {
return Arrays.asList(number);
}
List<Double> result = new ArrayList<>(numParts);
double qty = Math.floor(number / numParts);
int t = numParts - 1;
IntStream.range(0, t).forEach(x -> result.add(qty));
result.add(number - (qty * t));
return result;
}