【问题标题】:I have a Java logic question to solve about sum problem我有一个关于求和问题的 Java 逻辑问题
【发布时间】:2021-11-15 00:21:55
【问题描述】:

我正在尝试获取一个列表并对其求和,但逻辑有点奇怪。

例如

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(求和,四舍五入到小数点后一位)

我正在努力做到这一点。

你能做到吗?如果你能做到这一点,你应该用什么样的逻辑来做到这一点?

【问题讨论】:

  • 向我们展示您到目前为止所做的尝试。
  • 我试过的什么都没有......我不知道

标签: java sum logic


【解决方案1】:

你可以通过初始化一个double类型的局部变量sum

来实现

double sum = 0; // Widening Casting

和单个循环遍历您的数组并使用正确的语句,例如if ... else if ... else 处理加法运算,包括我假设的最后一次舍入运算

sum += arrayItem; // Compound assignment operator

那你应该很好。

【讨论】:

    【解决方案2】:

    试试这个。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多