[英]I have a Java logic question to solve about sum problem
我正在尝试获取一个列表并对其进行求和,但逻辑有点奇怪。
例如
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,把剩下的小数传给下一个)
Sum-> 1604(求和,四舍五入到小数点后一位)
我正在努力让它变成这样。
你能做这个吗? 如果你能做到这一点,你应该用什么样的逻辑来做?
您可以通过初始化双类型局部变量sum来实现此目的
double sum = 0; // Widening Casting
并且使用单个循环迭代您的数组并使用适当的语句,例如if ... else if ... else来处理加法运算,包括我假设的最后一次四舍五入运算
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.