2009-08-04 3 views
0

Wie konvertiert man eine Zeichenkette 0E-11 in Java in 0.00000000000? Ich möchte die Nummer in nicht wissenschaftlichen Notationen anzeigen. Ich habe versucht, den Zahlenformatierer in Java anzuschauen, aber ich muss die genaue Zahl von Dezimalzahlen spezifizieren, die ich will, aber ich werde nicht immer wissen. Ich möchte einfach die Anzahl der Dezimalstellen, die durch meine ursprüngliche Nummer spezifiziert sind.Wie konvertiert man eine Zeichenkette 3.0103E-7 zu 0.00000030103 in Java?

Antwort

3

Ich würde BigDecimal.Pass Ihre Zeichenfolge als Parameter verwenden und dann String.format verwenden, um Ihre neu erstellte BigDecimal ohne wissenschaftliche Notation darzustellen. Float oder Double-Klassen können ebenfalls verwendet werden.

9

Anscheinend ist die richtige Antwort, Benutzer BigDecimal zu verwenden und die Präzisions- und Maßstabszahlen abzurufen. Dann benutze diese Zahlen im Formatierer. Etwas Ähnliches wie folgt aus:

BigDecimal bg = new BigDecimal(rs.getString(i)); 
Formatter fmt = new Formatter(); 
fmt.format("%." + bg.scale() + "f", bg); 
buf.append(fmt); 
+0

Das ist genau das, was ich vorgeschlagen :) –

+3

Ja, Eugene, aber der Teufel in den Details; Der Code des Arbeitsbeispiels ist normalerweise hilfreicher als eine Beschreibung. Zum Beispiel hat jemand vorgeschlagen, dass ich EXEC für eine gespeicherte Prozedur (in Oracle 10g) verwende. Die Idee war richtig (verwendete eine gespeicherte Prozedur anstelle einer Funktion), aber die Details (CALL vs. EXEC) waren falsch. Wie Torvalds einmal sagte: "Zeig mir den Code." http://lkml.org/lkml/2000/8/25/132 –

+1

Machst du Witze? Welche Art von Details benötigen Sie hier? Es ist schon sehr einfach ... die ganze Sache dreht sich um die Idee. :) –

2
double d = Double.parseDouble("7.399999999999985E-5"); 
NumberFormat formatter = new DecimalFormat("###.#####"); 
String f = formatter.format(d); 
System.out.println(f); // output --> 0.00007 
3

Mit BigDecimal:

public static String removeScientificNotation(String value) 
{ 
    return new BigDecimal(value).toPlainString(); 
} 

public static void main(String[] arguments) throws Exception 
{ 
    System.out.println(removeScientificNotation("3.0103E-7")); 
} 

Drucke:

0.00000030103 
+0

Anscheinend ist dies die einzige Lösung, mein Problem! –

Verwandte Themen