计算总价

时间:2016-09-07 16:39:17

标签: java

我有一个抽象类37.00,我想计算每个Transaction的总价。总价格的计算方法是,在Transaction中获取每个Product的价格,然后将该价格乘以每个Map的数量。我只是不知道如何将这些价格乘以Product中的数量。有人可以帮帮我吗?我几乎尝试了一切,没有任何作用。

Map

3 个答案:

答案 0 :(得分:1)

BigDecimal是不可变的,add不会更改调用它的对象。因此,您需要重新分配add

的结果
BigDecimal calculateTotal() {
  BigDecimal total = new BigDecimal(0);
  for (Map.Entry<Product, Integer> entry : products.entrySet()) {
    total = total.add(BigDecimal.valueOf(entry.getKey().getPrice() * entry.getValue()));
  }
  return total;
}

答案 1 :(得分:0)

  

我只是不知道如何将这些价格乘以数量   作为Map中的值。有人可以帮帮我吗?

可以通过迭代Map条目来完成,以便将数量(Map的值)乘以其价格,如下所示:

BigDecimal calculateTotal() {
    BigDecimal total = new BigDecimal(0);
    for (Map.Entry<Product, Integer> entry : products.entrySet()) {
        total = total.add(
            BigDecimal.valueOf(entry.getKey().getPrice()).multiply(
                BigDecimal.valueOf(entry.getValue())
            )
        );
    }
    return total;
}

注意:我认为Product#getPrice()会返回double

NB 2 由于BigDecimal 不可变,您需要在每次迭代时重新分配变量total

NB 3 为避免计算失去任何精确度,您需要将所有内容转换为BigDecimal

答案 2 :(得分:0)

你很亲密。请看一下:

BigDecimal calculateTotal()
{
    BigDecimal total = new BigDecimal(0);

    for(Product eachProduct : products.keySet())
    {
        total.add(eachProduct.getPrice() * products.get(eachProduct));
    }

    return total;
}

唯一的区别是这一行:total.add(eachProduct.getPrice() * products.get(eachProduct));

我添加此内容以从与Integer关联的地图中抓取Product

如果使用Java 8,您也可以执行流式处理。

total = new BigDecimal(map.keySet()
     .stream().mapToDouble( product -> product.getPrice() * products.get(product) )
     .sum());