如何在Java中将BigDecimal乘以一个整数

70

如何在Java中将BigDecimal乘以整数?我尝试了这个但不正确。

import java.math.BigDecimal;
import java.math.MathContext;

public class Payment {
    int itemCost;
    int totalCost = 0;

    public BigDecimal calculateCost(int itemQuantity,BigDecimal itemPrice){
        itemCost = itemPrice.multiply(itemQuantity);
        totalCost = totalCost + itemCost;
    return totalCost;
   }

3
你遇到了什么问题? - Rohit Jain
我认为这是编译错误,因为multiply需要另一个BigDecimal - Dave Newton
你怎么知道它不正确? - Code-Apprentice
1
你应该在itemCosttotalCost中使用BigDecimal。毕竟,如果itemPrice * itemQuantity超过了int的范围,那怎么办呢?(如果这永远不会发生,那你为什么一开始就使用BigDecimal呢?) - Ted Hopp
1
定义“不正确”是不充分的问题陈述。我们无法确定您指的是“编译错误”,“错误的结果”,“计算机爆炸”,还是其他情况。 - user207421
3个回答

106

你的代码中存在许多 类型不匹配 的问题,比如试图在需要 BigDecimal 的地方放置一个 int 值。以下是已经更正的代码:

public class Payment
{
    BigDecimal itemCost  = BigDecimal.ZERO;
    BigDecimal totalCost = BigDecimal.ZERO;

    public BigDecimal calculateCost(int itemQuantity, BigDecimal itemPrice)
    {
        itemCost  = itemPrice.multiply(BigDecimal.valueOf(itemQuantity));
        totalCost = totalCost.add(itemCost);
        return totalCost;
    }
}

哈哈,我对于 BigDecimal(int) 构造函数的想法是正确的。 :P - Robert Harvey
14
使用BigDecimal.valueOf(itemQuantity)而不是构造函数,可以重复使用BigDecimal的零到十个对象,避免可能的新对象构造。 - Crunch

4

如果我是你,我会设置BigDecimal的比例,以便不会遇到过长的数字。

在下面的BigDecimal初始化中,整数2设置了比例。

由于您有大量的数据类型不匹配,我已经相应地进行了更改以进行调整。

class Payment   
{
      BigDecimal itemCost=new BigDecimal(BigInteger.ZERO,  2);
      BigDecimal totalCost=new BigDecimal(BigInteger.ZERO,  2);

     public BigDecimal calculateCost(int itemQuantity,BigDecimal itemPrice)
       { 
           BigDecimal   itemCost = itemPrice.multiply(new BigDecimal(itemQuantity)); 
             return totalCost.add(itemCost); 
       }
  }

BigDecimals是对象,而不是基本类型,所以请确保您初始化了itemCosttotalCost,否则在尝试添加到totalCostitemCost时可能会给您返回nullpointer。


+1 强调规模问题。顺便提一下,您的乘法将导致 itemCost 的规模为 4,而不是 2:“返回一个 BigDecimal,其值为(this × multiplicand),其规模为(this.scale() + multiplicand.scale())”https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal- - pyb

2
首先,BigDecimal.multiply() 返回一个 BigDecimal,而你正在尝试将其存储在一个 int 中。
其次,它需要另一个 BigDecimal 作为参数,而不是一个 int
如果你在这些计算中使用 BigDecimal,那么应该可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接