2012-10-17 15 views
34

Java'da bir tam sayı ile bir BigDecimal'i nasıl çoğaltasınız? Bunu denedim ama doğru değil. ÖncelikleBir BigDecimal'i Java'da bir tamsayı ile çarpma

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 veya itemCost Eğer alıyorsanız hangi sorun eklemek çalışırken aksi takdirde sen nullpointer verebilir, değil ilkel nesne, böylece itemCost ve totalCost başlatmak emin olun? –

+0

"Çarpım" başka bir "BigDecimal" aldığından beri derleme hatası olduğunu varsayalım? –

+0

Bunun doğru olmadığını nereden biliyorsunuz? –

cevap

61

Böyle BigDecimal gerekli olan bir int değeri koymak için çalışıyor olarak tip uyuşmazlıkları çok kodunuzda var. kodunuzun düzeltilmiş versiyon: Senin yerinde olsam ben uzun sayılar üzerinde son değil ki

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." Demek istemeyiz. BigDecimal (int) 'kurucu hakkında haklıymışım. : P –

+2

'BigDecimal.valueOf (itemQuantity)' işlevini kullanarak, kurucu yerine, BigDecimals'ı sıfırdan 10'a çıkarır ve olası yeni nesne yapısını engeller. Ölçekle ilgili sorunu vurgulamak için – chrsalln

2

, BigDecimal.multiply() bir BigDecimal döndürür ve bir int o saklamak için çalışıyoruz.

İkincisi, argüman değil, bir int olarak başka BigDecimal sürer.

Bu hesaplamalarda yer alan tüm değişkenler için BigDecimal kullanırsanız, düzgün çalışmalıdır.

3

, ben BigDecimal ölçeğini ayarlamak olacaktır. Aşağıdaki BigDecimal başlatmadaki tam sayı 2, ölçeği ayarlar.

Çok fazla veri türü uyuşmazlığınız olduğundan, ayarlamak için buna göre değiştirdim.

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 Eğer

+0

+1. Bunu yaparken, çarpımınızın "4" değil, "2" ölçeğine sahip "itemCost" ile biteceğini unutmayın: "Değeri (bu × çoklu) olan ve büyüklüğü (değeri) olan bir BigDecimal döndürür. this.scale() + multiplicand.scale()) "https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal- – pyb