2012-10-17 25 views
34

में एक पूर्णांक द्वारा BigDecimal को गुणा कैसे करें जावा में एक पूर्णांक द्वारा आप 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

क्या समस्या हो रही है जोड़ने की कोशिश? –

+0

मुझे लगता है कि यह संकलन त्रुटि है क्योंकि 'multiply' एक और' BigDecimal' लेता है? –

+0

आप कैसे जानते हैं कि यह सही नहीं है? –

उत्तर

61

आप इस तरह के एक 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; 
    } 
} 
+0

हे। मैं 'BigDecimal (int) 'निर्माता के बारे में सही था। : पी –

+2

कन्स्ट्रक्टर की बजाय 'BigDecimal.valueOf (itemQuantity)' का उपयोग करके, संभावित नए ऑब्जेक्ट निर्माण से परहेज करते हुए, BigDecimals शून्य से दस का पुन: उपयोग करेगा। पैमाने के बारे में मुद्दे पर जोर देने के लिए – chrsalln

2

पहले, BigDecimal.multiply() रिटर्न एक BigDecimal और आप स्टोर करने के लिए है कि एक int में कोशिश कर रहे हैं।

दूसरा, यह लेता है BigDecimal तर्क के रूप में, int पर नहीं।

यदि आप इन गणनाओं में शामिल सभी चर के लिए BigDecimal का उपयोग करते हैं, तो यह ठीक काम करना चाहिए।

3

अगर मैं तुम्हें थे, मैं 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 वस्तु, नहीं पुरातन हैं, तो सुनिश्चित करें कि आप प्रारंभ itemCost और totalCost बनाने, अन्यथा यह आप nullpointer दे सकते हैं, जब आप रास्ते totalCost या itemCost

+0

+1। जब आप इसमें हों, तो कृपया ध्यान दें कि आपका गुणा 'itemCost' के साथ '4'' के पैमाने पर समाप्त होगा, न कि' 2': "एक बिगडिसीमल देता है जिसका मूल्य (यह × गुणक) है, और जिसका स्केल है (this.scale() + multiplicand.scale()) "https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal- – pyb