Как умножить BigDecimal на целое число в Java
Как вы умножаете BigDecimal на целое число в Java? Я попробовал это, но это не правильно.
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;
}
Ответы
Ответ 1
В вашем коде есть много несоответствий типов, например, попытка установить значение int
, где требуется BigDecimal
. Исправленная версия вашего кода:
public class Payment
{
BigDecimal itemCost = BigDecimal.ZERO;
BigDecimal totalCost = BigDecimal.ZERO;
public BigDecimal calculateCost(int itemQuantity, BigDecimal itemPrice)
{
itemCost = itemPrice.multiply(new BigDecimal(itemQuantity));
totalCost = totalCost.add(itemCost);
return totalCost;
}
}
Ответ 2
Если бы я был вами, я бы установил масштаб BigDecimal, чтобы я не попадал на длинные числа.
Целое число 2 в инициализации BigDecimal ниже устанавливает масштаб.
Поскольку у вас много несоответствий типа данных, я изменил его, чтобы настроить.
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 - это Object, а не примитивы, поэтому убедитесь, что вы инициализируете itemCost
и totalCost
, иначе он может дать вам nullpointer при попытке добавить на totalCost
или itemCost
Ответ 3
Во-первых, BigDecimal.multiply()
возвращает BigDecimal
, и вы пытаетесь сохранить это в int
.
Во-вторых, в качестве аргумента требуется еще BigDecimal
, а не int
.
Если вы просто используете BigDecimal
для всех переменных, участвующих в этих вычислениях, он должен работать нормально.