2016-08-25 8 views
9

फेंकना चाहिए मेरे पास एक स्ट्रिंग है जो एक संख्या संग्रहीत करती है। अब मैं उस स्ट्रिंग को पार्स करना चाहता हूं और फ्लोट के रूप में जाना चाहता हूं।स्ट्रिंग के रूप में संग्रहीत फ्लैटिंग फ्लोट को अपवाद

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     try { 
      System.out.println(Integer.parseInt(" 2 ")); 
     } catch(NumberFormatException e) { 
      System.out.println("Exception caught"); 
     } 
     System.out.println(Float.parseFloat(" 2.4 ")); 

    } 
} 

अब उपरोक्त कोड में यदि आप इसे चलाते हैं तो यह सफल होगा। मेरा प्रश्न यह है कि पूर्णांक के मामले में पीछे की जगहें NumberFormatException फेंकती हैं जबकि एक फ्लोट को पार्स करने से कोई फेंक नहीं जाता है?

पीएस: बूउलेन और डबल पार्सिंग के मामले में भी यही मामला है।

पीपीएस: जावा में एक असंगतता क्यों है? और मैं पहले से ही स्रोत कोड

+0

कारण है कि आप स्रोत कोड पर एक नज़र नहीं है और जानने के? या @ जेन्स उत्तर देखें ;-) –

+4

@ScaryWombat जावा के स्रोत कोड को प्राप्त करना आवश्यक नहीं है और यह जानने के लिए कि कोई विधि क्या करती है उसे पढ़ना आवश्यक नहीं है; वह जानकारी विधि के जावाडॉक में होनी चाहिए। इस मामले में 'Float.parseFloat (स्ट्रिंग)' का जावाडॉक यह नहीं कहता है, लेकिन यह कहता है _... जैसा कि क्लास फ्लोट ..._ के मानऑफ विधि द्वारा किया गया है, और 'Float.valueOf के JavaDoc (स्ट्रिंग) 'कहता है _ में व्हाइटस्पेस वर्णों को लेना और पीछे हटाना अनदेखा कर दिया गया है। – SantiBailors

+0

@ सैंटिबेलर्स धन्यवाद - उत्कृष्ट टिप्पणी –

उत्तर

3

जाँच आप संबंधित स्रोत कोड में देख सकते हैं, मूल्य छंटनी की जाएगी:

static FloatingDecimal.ASCIIToBinaryConverter readJavaFormatString(String arg) throws NumberFormatException { 
    boolean arg0 = false; 
    boolean arg1 = false; 

    try { 
     arg = arg.trim(); 
    .... 

तो रिक्त स्थान को एक floatValue को परिवर्तित करने से पहले हटा दिया जाएगा। अधिक जानकारी के लिए FloatingDecimal का स्रोत कोड देखें जिसे Float.class द्वारा बुलाया जाता है।

Integer.parseInt() स्ट्रिंग मान Trimm नहीं है:

public static int parseInt(String arg, int arg0) throws NumberFormatException { 
    if (arg == null) { 
     throw new NumberFormatException("null"); 
    } else if (arg0 < 2) { 
     throw new NumberFormatException("radix " + arg0 + " less than Character.MIN_RADIX"); 
    } else if (arg0 > 36) { 
     throw new NumberFormatException("radix " + arg0 + " greater than Character.MAX_RADIX"); 
    } else { 
     int arg1 = 0; 
     boolean arg2 = false; 
     int arg3 = 0; 
     int arg4 = arg.length(); 
     int arg5 = -2147483647; 
     if (arg4 > 0) { 
      char arg8 = arg.charAt(0); 
      if (arg8 < 48) { 
       if (arg8 == 45) { 
        arg2 = true; 
        arg5 = MIN_VALUE; 
       } else if (arg8 != 43) { 
        throw NumberFormatException.forInputString(arg); 
       } 

       if (arg4 == 1) { 
        throw NumberFormatException.forInputString(arg); 
       } 

       ++arg3; 
      } 

      int arg7; 
      for (int arg6 = arg5/arg0; arg3 < arg4; arg1 -= arg7) { 
       arg7 = Character.digit(arg.charAt(arg3++), arg0); 
       if (arg7 < 0) { 
        throw NumberFormatException.forInputString(arg); 
       } 

       if (arg1 < arg6) { 
        throw NumberFormatException.forInputString(arg); 
       } 

       arg1 *= arg0; 
       if (arg1 < arg5 + arg7) { 
        throw NumberFormatException.forInputString(arg); 
       } 
      } 

      return arg2 ? arg1 : -arg1; 
     } else { 
      throw NumberFormatException.forInputString(arg); 
     } 
    } 
} 

यही कारण है कि आप एक अपवाद वहाँ पाने

संबंधित मुद्दे