2012-10-17 1 views
34

Java에서 BigDecimal에 정수를 곱하는 방법은 무엇입니까? 나는 이것을 시도했지만 올바르지 않다. 우선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; 
    } 
+3

totalCost 또는 itemCost 당신이지고 어떤 문제에 추가하려고하면서 그렇지 않으면 당신이 nullpointer 줄 수있는,하지 프리미티브 객체, 그래서 당신이 itemCosttotalCost 초기화해야합니다? –

+0

나는'multiply'가 다른'BigDecimal'을 취하기 때문에 컴파일 에러라고 생각하겠습니까? –

+0

그것이 정확하지 않다는 것을 어떻게 압니까? –

답변

61

당신은 BigDecimal이 요구되는 int 값을 넣어 시도로 타입 불일치의 많은 코드에서 있습니다. 코드의 수정 된 버전 : 내가 당신이라면 나는 긴 숫자에 결국 그나마 있도록

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; 
    } 
} 
+0

Heh. 나는 BigDecimal (int) 생성자에 대해 옳았다. : P –

+2

생성자 대신에'BigDecimal.valueOf (itemQuantity)'를 사용하면 BigDecimal을 0에서 10까지 재사용하여 새로운 객체 생성을 피할 수 있습니다. – chrsalln

2

BigDecimal.multiply()BigDecimal 반환하고 당신은 int에 그를 저장하기 위해 노력하고 있습니다.

둘째, 그것은 인수 아닌 int으로 다른 BigDecimal 걸린다.

이 계산에 관련된 모든 변수에 BigDecimal 만 사용하면 정상적으로 작동합니다.

3

, 나는의 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); 
     } 
    } 

BigDecimal를 당신이

+0

+1에 대한 문제를 강조합니다. 곱셈은 ​​곱셈이 '2'가 아닌 '4'가 아닌 'itemCost'로 끝납니다. "값이 (this x multiplicand)이고 배율이 (*) 인 BigDecimal을 반환합니다. this.scale() + multiplicand.scale()) "https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal- – pyb