Java Double Trouble - How can I ensure 4.45 is 4.45 without using BigDecimal? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 30 उत्तरों

ऐसा:

  // aValue = 4.45 // bValue = 4.35 // maxValueDiff = 0.1 // a - b = 0.1 का पूर्ण मान (गणित.एब्स (एवल्यू - बीवल्यू) & lt; = maxValueDiff) वापस सत्य; Logger.info ("valueDiffCheck ए:" + aValue + "b:" + bValue + "e1:" + maxValueDiff);  

मैं अपने लॉग में यह क्यों देखता हूं:

  valueDiffCheck a: 4.45 b: 4.35 e1: 0.1  

> संदेह यह है कि दुर्घटना में इसकी गलतताओं के साथ डबल दर्द है, लेकिन अगर ऐसा होता है तो मुझे देखना नहीं चाहिए? जैसे इसे प्रिंट करना चाहिए 0.1 वास्तव में 0.10000000111 या कुछ और है? ... या क्या प्रिंटिंग प्रारूप के बारे में कुछ परेशानी है?

लक्ष्य कोड बहुत अधिक डेटा के साथ उच्च प्रदर्शन है, इसलिए हम बिगडीक्यूमल का उपयोग नहीं करना चाहते हैं यह सुनिश्चित करने के लिए अगले सबसे अच्छी बात क्या है कि 0.44 0.44 है?

ठीक है मुझे स्पष्ट रूप से बताएं कि हमें केवल दो दशमलव स्थानों की आवश्यकता है BigDecimal उपयोग करने में शामिल सटीकता प्रमुख अतिरेक है

मैं उन जगहों पर एक त्रुटि मार्जिन का उपयोग करके इस समस्या का समाधान करता हूं जहां यह ऊपर आ सकता है। निम्नलिखित एक बहुत आसान तरीका है - लेकिन जरूरी नहीं कि सबसे अच्छा तरीका (आप इसे अधिक केंद्रीकृत, कॉन्फ़िगर करने योग्य, इत्यादि चाहते हैं) - यह करने के लिए अपना कोड संशोधित करें:

  निजी स्थिर अंतिम डबल त्रुटि = 1e-7; // एसएनआईपी अगर (गणित.एब्स (एवल्यू - बीवल्यू) & lt; = maxValueDiff + त्रुटि) सच हो; Logger.info ("valueDiffCheck ए:" + aValue + "b:" + bValue + "e1:" + maxValueDiff);  

Comments

Popular posts from this blog

c# - XML serialize base class without knowing derived class -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

udp - The relationship between MTU and size of skb in xmit function -