我试图获得一个列表并对其求和,但逻辑有点奇怪。
例如
General cost =
{234.456,
345.456,
456.567,
567.678}
我尝试
求和
一般成本将每行小数点后的数字相加,如果不超过1,则将小数点后值传递给下一行。
在上述情况下,我将一般成本逐一称为
1->234(通过0.456进入下一个(
2->345(345.456+0.456=345.912 0.912传递到下一个,由于小数点后的数字不超过1,小数点后数字按原样传递(
3->457(456.567+0.912=457.479 0.479传递到下一个,因为小数的和大于1,所以将值加1,并将其余小数传递到下个(
4->568(567.678+0.479=568.157将0.157传递给下一个,由于小数之和大于1,因此将值加1,并将其余小数传递给下个(
总和->1604(求和,四舍五入到小数点后一位(
我正努力把它做成这样。
你能做到吗?如果你能做到这一点,你应该用什么样的逻辑来实现?
您可以通过初始化一个双重类型的局部变量sum来实现这一点
double sum = 0; // Widening Casting
使用一个循环在数组上迭代并使用正确的语句,例如if。。。否则如果。。。否则处理加法操作,包括最后一次取整操作,我假设
sum += arrayItem; // Compound assignment operator
那么你应该表现得很好。
试试这个。
public static void main(String[] args) {
double[] costs = {234.456, 345.456, 456.567, 567.678};
double carry = 0;
double total = 0;
for (double cost : costs) {
double sum = cost + carry;
carry = sum % 1; // get fractional part of sum
double newCost = sum - carry; // get integer part of sum
total += newCost;
System.out.printf("cost=%.3f new cost=%.0f carry=%.3f%n", cost, newCost, carry);
}
System.out.printf("total=%.0f%n", total);
}
输出:
cost=234.456 new cost=234 carry=0.456
cost=345.456 new cost=345 carry=0.912
cost=456.567 new cost=457 carry=0.479
cost=567.678 new cost=568 carry=0.157
total=1604