BigDecimalदोषरहित रूपांतरण की गारंटी देने के लिए कक्षा के पास कुछ उपयोगी विधियाँ हैं:
byteValueExact()shortValueExact()intValueExact()longValueExact()
हालांकि, तरीके floatValueExact()और doubleValueExact()मौजूद नहीं हैं।
मैंने विधियों के लिए OpenJDK स्रोत कोड पढ़ा floatValue()और doubleValue()। दोनों क्रमशः Float.parseFloat()और Double.parseDouble(), जो सकारात्मक या नकारात्मक अनंत लौट सकते हैं, पर वापस आते हैं। उदाहरण के लिए, 10,000 9 के एक तार को पार्स करने से सकारात्मक अनंत लौट आएगा। जैसा कि मैं समझता हूं, BigDecimalअनंत की एक आंतरिक अवधारणा नहीं है। इसके अलावा, 100 9 नंबर के पत्तों की एक स्ट्रिंग को पार्स करने के रूप में doubleदेता है 1.0E100, जो अनंत नहीं है, लेकिन सटीक खो देता है।
एक उचित कार्यान्वयन floatValueExact()और क्या है doubleValueExact()?
मैं एक के बारे में सोचा doubleसमाधान के संयोजन से BigDecimal.doubleValue(), BigDecial.toString(), Double.parseDouble(String)और Double.toString(double), लेकिन यह गंदा लग रहा है। मैं यहाँ पूछना चाहता हूँ क्योंकि वहाँ (एक!) एक सरल समाधान होना चाहिए।
स्पष्ट होने के लिए, मुझे उच्च प्रदर्शन समाधान की आवश्यकता नहीं है।