2012-10-17 14 views
34

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

に追加しようとしているときに発生する、NullPointer与えることができますか? –

+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にそれを保存しようとしています。

第2に、は、intではなく、をに置き換えます。

これらの計算に含まれるすべての変数に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はオブジェクトではなく、プリミティブなので、あなたがitemCosttotalCostを初期化することを確認し、それ以外の場合はあなたが取得しているどのような問題totalCostまたはitemCost

+0

+1はスケールに関する問題を強調しています。あなたがそれをしている間、あなたの乗算は '2'ではなく '4'のスケールを持つ' itemCost'で終わることに注意してください: "値が(this×被乗数)で、スケールが( this.scale()+ multiplicand.scale()) "https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal- – pyb

関連する問題