2012-05-09 17 views
7

मैं है निम्नलिखित कोड जो संख्या की एक स्ट्रिंग (एक अंतरिक्ष से विभाजित) विभाजन और उसके बाद तैरता की एक सरणी बनाता है स्ट्रिंग में मान वैज्ञानिक नोटेशन के साथ स्वरूपित होते हैं - उदाहरण के लिए वे -3.04567 ई -8 पढ़ते हैं।एक स्ट्रिंग का प्रारूपण वैज्ञानिक संकेतन निकालने के लिए जावा

मैं जो करना चाहता हूं वह एक फ्लोट के साथ समाप्त होता है जिसमें ई संख्या नहीं होती है।

मैं इस धागे को पढ़ रहा हूं जो बताता है कि मैं बिगडेसिमल का उपयोग कर सकता हूं, हालांकि यह काम करने में असमर्थ हूं - क्या यह सबसे अच्छा तरीका है या मुझे कुछ और करने की कोशिश करनी चाहिए? How to convert a string 3.0103E-7 to 0.00000030103 in Java?

+1

एक नाव ई संख्या शामिल नहीं है। वैज्ञानिक नोटेशन उन तरीकों में से एक है जिन्हें फ़्लोट का प्रतिनिधित्व किया जा सकता है। यदि डिफ़ॉल्ट प्रारूप आपके लिए काम नहीं करता है, तो java.text.DecimalFormat में एक नज़र डालें। – theglauber

उत्तर

9

नीचे आपका कोड थोड़ा संशोधित है।

public void function() { 
    String value = "123456.0023 -3.04567E-8 -3.01967E-20"; 
    String[] tabOfFloatString = value.split(" "); 
    int length = tabOfFloatString.length; 
    System.out.println("Length of float string is" + length); 
    float[] floatsArray = new float[length]; 
    for (int l = 0; l < length; l++) { 
     String res = new BigDecimal(tabOfFloatString[l]).toPlainString(); 
     System.out.println("Float is " + res); 
     floatsArray[l] = Float.parseFloat(res); 
    } 

} 
+0

बिल्कुल सही - धन्यवाद। कोड में संशोधन करने की भी सराहना करते हैं। – GuybrushThreepwood

+0

खुशी सब मेरा है :) – dharam

1
NumberFormat format = new DecimalFormat("0.############################################################"); 
System.out.println(format.format(Math.ulp(0F))); 
System.out.println(format.format(1F)); 
1

नाव एक e शामिल नहीं है, कि यह सिर्फ कैसे आप के लिए प्रदर्शित किया जा रहा है। आप इसे प्रदर्शित करने के तरीके को बदलने के लिए DecimalFormat का उपयोग कर सकते हैं।

http://ideone.com/jgN6l

java.text.DecimalFormat df = new java.text.DecimalFormat("#,###.######################################################"); 
System.out.println(df.format(res)); 

आप चल बिन्दु की वजह से हालांकि कुछ अजीब लग रही संख्या देखेंगे।

2

स्वीकृत मेरे लिए काम नहीं करता है ने उत्तर दिया, जब ऐसा

floatsArray[l] = Float.parseFloat(res); 

Float.parseFloat (रेस): मुझे प्रति यह अच्छी तरह से काम करता है और वास्तव में वह घातांक के आदेश परवाह करता है नहीं करता है वैज्ञानिक एनोटेशन में गैर वैज्ञानिक एनोटेशन बदलें ताकि मुझे इसे हटाना पड़े।

यह एक काम किया:

public String[] avoidScientificNotation(float[] sensorsValues) 
{ 
    int length = sensorsValues.length; 
    String[] valuesFormatted = new String[length]; 

    for (int i = 0; i < length; i++) 
    { 
     String valueFormatted = new BigDecimal(Float.toString(sensorsValues[i])).toPlainString(); 
     valuesFormatted[i] = valueFormatted; 
    } 
    return valuesFormatted; 
} 
संबंधित मुद्दे