जबकि आपने त्रुटियों को गोल करने के बारे में सुना होगा, तो हो सकता है कि आप सोच रहे हों कि आपको यहां एक गोल करने की त्रुटि क्यों है।
float a1 = 1.4f;
float b1 = 0.5f;
double c1 = 1.4;
double d1 = 0.5;
System.out.println(new BigDecimal(a1) + " - " + new BigDecimal(b1) + " is " +
new BigDecimal(a1).subtract(new BigDecimal(b1)) + " or as a float is " + (a1 - b1));
System.out.println(new BigDecimal(c1) + " - " + new BigDecimal(d1) + " is " +
new BigDecimal(c1).subtract(new BigDecimal(d1)) + " or as a double is " + (c1 - d1));
प्रिंट
1.39999997615814208984375 - 0.5 is 0.89999997615814208984375 or as a float is 0.9
1.399999999999999911182158029987476766109466552734375 - 0.5 is
0.899999999999999911182158029987476766109466552734375
or as a double is 0.8999999999999999
आप देख सकते हैं, न तो float
है और न ही double
वास्तव में इन मूल्यों का प्रतिनिधित्व कर सकते हैं, और जब नाव या डबल छपा है, कुछ राउंडिंग आप से छिपाने के लिए होता है। फ्लोट के इस मामले में, 7 दशमलव स्थानों पर गोल करने से आपके द्वारा अपेक्षित संख्या उत्पन्न होती है। डबल के मामले में जिसमें परिशुद्धता के 16 अंक हैं, राउंडिंग त्रुटि दिखाई दे रही है।
@Eric Postpischil के रूप में, नोटों float
या double
आपरेशन एक गोलाई त्रुटि है कि क्या पूरी तरह से इस्तेमाल किया मूल्यों पर निर्भर करता है। इस स्थिति में, यह फ्लोट था जो प्रतिनिधित्व मूल्य के माध्यम से भी अधिक सटीक प्रतीत होता था, दो अंकों से 0.9 से आगे था।
संक्षेप में: यदि आप float
या double
का उपयोग करने जा रहे हैं तो आपको एक समझदार गोल रणनीति का उपयोग करना चाहिए। यदि आप ऐसा नहीं कर सकते हैं, तो BigDecimal का उपयोग करें।
System.out.printf("a1 - b1 is %.2f%n", (a1 - b1));
System.out.printf("c1 - d1 is %.2f%n", (c1 - d1));
प्रिंट
a1 - b1 is 0.90
c1 - d1 is 0.90
जब आप एक नाव या डबल प्रिंट, यह मानता है कि निकटतम लघु दशमलव मान एक तुम सच में चाहते हैं। यानी 0.5 उल के भीतर।
उदा।
double d = 1.4 - 0.5;
float f = d;
System.out.println("d = " + d + " f = " + f);
प्रिंट
d = 0.8999999999999999 f = 0.9
इसी http://stackoverflow.com/questions/322749/retain-precision-with-doubles-in-java – tjg184
इसमें http मदद मिल सकती है: //epramono.blogspot .com/2005/01/double-vs-bigdecimal.html – kosa
यह भी देखें http://mindprod.com/jgloss/floatingpoint.html –