2013-02-12 34 views
8

क्या बिगडिसीमल के मूल संचालन के साथ एक बिगडिसीमल लाइब्रेरी है जो शून्य मानों की अनुमति देती है?बिगडिसीमल के लिए जावा गणित लाइब्रेरी जो शून्य मानों की अनुमति देता है

नल को गणितीय उद्देश्य के लिए 0 के रूप में माना जाना चाहिए।

मैं संभावित शून्य मूल्यों के लिए सभी शून्य जांच नहीं करना चाहता हूं।

आप या तो डेटाबेस, अनुप्रयोग या ध्यान में रखते हुए शून्य मान की अनुमति है और new BigDecimal(0) के साथ सब कुछ को प्रारंभ या नल मूल्यों के लिए हर उपयोग पर अशक्त जांच करने के लिए कभी नहीं।

कुछ की तरह:

public static BigDecimal add(final BigDecimal value, final BigDecimal augend) 
{ 
    if (value == null) 
     return augend; 
    else if (augend == null) 
     return value; 
    else 
     return value.add(augend); 
} 

public static BigDecimal multiply(final BigDecimal value, final BigDecimal multiplicand) 
{ 
    if (value == null || multiplicand == null) 
     return null; 

    return value.multiply(multiplicand); 
} 

उत्तर

13

कोडिंग सहेजें, बस डेटाबेस में शून्य मानों की अनुमति न दें। डिफ़ॉल्ट मान शून्य बनाओ।

new BigDecimal(0) के लिए: नहीं, BigDecimal.ZERO का उपयोग करें।

+1

+1। कभी इसकी जांच नहीं की। – djmj

+0

दिए गए उत्तरों के साथ मैंने निर्णय लिया कि मेरे दशमलव के डेटाबेस में शून्य मानों को अनुमति न दें। मैं पहले से ही अनुमति देने के लिए लंबे समय तक गीला करने का तरीका सोच रहा था, और नल-स्टेट का ट्रैक रखना सिर्फ कोडिंग समय बर्बाद था। – djmj

+0

गुई उद्देश्यों के लिए एक फ़्लोटिंग-पॉइंट तुलनीय फ़ंक्शन बनाने के लिए छोटा ओवरहेड एक उचित व्यापार है। – djmj

5

मुझे लगता है मैं पुस्तकालय अशक्त के लिए जाँच की बात नहीं दिख रहा है। निश्चित रूप से, लाइब्रेरी एनपीई नहीं फेंक देगी, लेकिन कॉलर को अंततः इसके लिए जांच करनी होगी। आपके उपरोक्त कॉलर क्या करने जा रहे हैं? यह सिर्फ आउटपुट का उपयोग नहीं कर सकता है। यह देखने के लिए जांच करनी होगी कि मूल्य के साथ कुछ भी करने से पहले लौटाया गया मूल्य कुछ बिंदु पर शून्य हो गया है या नहीं।

इसके अलावा, मैंने कभी भी लिखा है कि किसी भी आवेदन के लिए शून्य से शून्य है। मैं उस व्यक्ति का उपयोग नहीं करना चाहता जो शून्य के रूप में शून्य के रूप में व्यवहार करता था।

यदि आपकी आवश्यकता है कि आपके डीबी में नल की अनुमति नहीं है, तो मैं डीबी को लिखने से पहले आपके डीएओ परत में नल की जांच करूंगा।

+0

एक JSF में देखने इसकी बहुत उपयोगी अगर डाटा शून्य जाँच की जा सकती, प्रदर्शित करने के लिए उपयोगकर्ता को अन्य सूचनाएं। मैं वर्तमान में डीएओ परत पर इसका उपयोग नहीं कर रहा हूं जहां सब कुछ शून्य मानों के लिए चेक किया गया है। वर्तमान में केवल संबंधित डेटा देखने के लिए कुछ परीक्षण। – djmj

+0

आह ठीक है। तो हो सकता है कि आपके जैसे कुछ स्थिर तरीके आपको कुछ परेशानी बचा सकें। बस संदेह है कि आपको बिगडिसीमल लाइब्रेरी खोजने में बहुत भाग्य मिलेगा जो शून्यों के रूप में शून्यों का इलाज करता है या जो एनपीई नहीं फेंकता है जब इसमें तर्कों में से एक शून्य है। – Kyle

+1

हर जगह शून्यों को शून्यों में कनवर्ट करें; वहां झूठ बोलने वाले नल को न छोड़ें। 'BigDecimal.Zero' के लिए –

6

मुझे एक ही समस्या थी (हालांकि डेटाबेस से संबंधित नहीं, केवल कुछ संभवतः शून्य बिगडेसिमल को जोड़ना आवश्यक था)।

public static BigDecimal add(BigDecimal... addends) { 
    BigDecimal sum = BigDecimal.ZERO; 
    if (addends != null) { 
     for (BigDecimal addend : addends) { 
      if (addend == null) { 
       addend = BigDecimal.ZERO; 
      } 
      sum = sum.add(addend); 
     } 
    } 
    return sum; 
} 

जावा 8 में एक ही: किसी भी पुस्तकालय नहीं मिला है, तो निम्नलिखित समारोह अपने आप को लिखना पड़ा

public static BigDecimal add(BigDecimal... addends) { 
    if (addends == null) { 
     return BigDecimal.ZERO; 
    } 
    return Arrays.stream(addends) 
      .filter(Objects::nonNull) 
      .reduce(BigDecimal.ZERO, BigDecimal::add); 
}