जैसा कि कई स्थानों (जैसे Why can't decimal numbers be represented exactly in binary?) में बताया गया है, सभी दशमलव अंशों को फ़्लोटिंग पॉइंट मानों के रूप में प्रदर्शित नहीं किया जा सकता है (जैसे जावा में float
में संग्रहीत)।जावा राउंड-ट्रिप स्ट्रिंग कैसे हो सकता है -> फ्लोट -> स्ट्रिंग भी कुछ (कुछ) मानों के लिए एक फ्लोट के रूप में प्रतिनिधित्व योग्य नहीं है?
दिया गया सामान्य उदाहरण "0.2" है। इस निफ्टी IEEE 754 Converter के मुताबिक, float
0.2 से निकटतम 0.20000000298023224 है, इसलिए float
के रूप में "0.2" को पार्स करना इस परिणाम को प्राप्त करना चाहिए।
हालांकि, मैं ने कहा कि जावा असंभव ऐसा करने में सक्षम हो रहा है:
String number="0.2";
float f = Float.parseFloat(number);
System.out.println("Result of roundtrip String -> float -> String: "+f);
प्रिंट:
गोल यात्रा स्ट्रिंग का परिणाम -> नाव -> स्ट्रिंग: 0.2
जावा कैसे जानता है कि मैं चाहता था ऊपर वर्णित अनुसार "0.20000000298023224" सटीक आउटपुट के बजाय (गोलाकार) आउटपुट "0.2"?
यह समझाने के लिए Javadocs of Float.toString()
कोशिश:
कितने अंक मीटर या एक का आंशिक भाग के लिए मुद्रित किया जाना चाहिए? आंशिक भाग का प्रतिनिधित्व करने के लिए कम से कम एक अंक होना चाहिए, और जितना अधिक है, लेकिन पर जितने अधिक अंक हैं, उतनी ही अधिक संख्या फ़्लोट के आसन्न मूल्यों से तर्क मान को विशिष्ट रूप से अलग करें।
दुर्भाग्य से, यह मुझे और भी भ्रमित करता है। "तर्क मान को विशिष्ट रूप से अलग करने के लिए जितने आवश्यक अंकों को प्रिंट करना" जावा को "0.2" प्रिंट करने की अनुमति देता है?
आदर्श रूप से, उत्तर क्यों समझाएगा यह प्रिंटिंग एल्गोरिदम चुना गया था। यह इस उदाहरण में, (कुछ) राउंड-ट्रिप काम करना है? क्या कोई और प्रेरणा है?
जब आपको उसकी आवश्यकता होती है तो जॉन स्कीट कहां है? क्या उसने ब्रेक्सिट किया था? – GhostCat
आप जानते हैं कि 0.21 या 0.2000001 दर्ज करने या कुछ भी इसी तरह के 0.2 लौटाता है? Http://stackoverflow.com/questions/17464675/convert-string-to-decimal-number-with-2-decimal-places-in-java – mylenereiners
देखें 7 शून्य, 10^7 = 2^23 इसलिए शायद 4 बाइट फ्लोट के 3 बाइट मंथिसा पहुंचे हैं। तो यहां यह अभी भी नियमित हो सकता है। यह अक्सर सी और सी ++ होता है जो अच्छे परिणाम (मेरी इंप्रेशन) के लिए थोड़ा सा धोखा देता है। –