Formatierung in spez. wissenschaftliche Notation

erik-beck

Grünschnabel
Hallo,

ich habe gerade ein Problem, und würde mich über
Lösungsvorschläge sehr freuen.

gegeben eine Double Zahl 12.7
ich will diese in wissenschaftliche notation umsetzen.

mit java bordmitteln geht aber nur 1.270E+01

hier mein code:
Java:
import java.util.*;

public class Formatter
{
  public static void main(String[] args)
  {
  
    //Fliesskommazahlen
    System.out.format(Locale.ENGLISH,"%9.3E", 12.7);

    }
}

gewünschte Formatierung 0.127E+02

Vielen Dank für die Hilfe
 
Zuletzt bearbeitet:
Hi
Kannst du deinen Code bitte in Java-Tags fassen (siehe meine Signatur)?

Wenn du das mit Double nicht lösen kannst, schau dir doch mal BigDecimal an. Achtung, Berechnungen in BigDecimal sind langsamer und ineffizienter!
 
Hallo,

ich denke nicht, dass du dein Zielformat mit Format-String-Anweisungen alleine hin bekommst. Man kann zwar die Skalierung des Exponents erzwingen (siehe //1) jedoch kann man dann keine führende "0" mehr im Format-String angeben.

Aber diese Funktionalität lässt sich IMHO recht einfach selbst realisieren (siehe //2);

Java:
package de.tutorials;

import java.text.DecimalFormat;

public class ScientificNumberFormatExample {
   public static void main(String[] args){
      System.out.println(new DecimalFormat("#.000#E0").format(12.7)); // 1
      System.out.println(toSciNotationWithCustomExponent(12.7, 2)); // 2
   }

   static String toSciNotationWithCustomExponent(double value, int exponent) {
      return String.format("%sE%s", value / Math.pow(10, exponent), exponent);
   }
}

Ausgabe:
Code:
,127E2
0.127E2

Gruß Tom
 
Hi.

Man kann die Ausgabe auch mit DecimalFormat erreichen. Was fehlt ist nur das '+' beim Exponenten.
Code:
scala> val f = new DecimalFormat("'0'.0#######E00##")

f: java.text.DecimalFormat = java.text.DecimalFormat@9f

scala> f.format(12.7)
res0: java.lang.String = 0,127E02
Das fehlende Plus könnte man natürlich noch dazuschummeln....

Gruß
 
Zuletzt bearbeitet:
Hallo,

na ja, das '0' davor ist aber auch keine generische Lösung, oder? *g*
Für solche "Randfälle" sind die Format-Strings nicht ausgelegt.

Gruß Tom
 
Hi.
na ja, das '0' davor ist aber auch keine generische Lösung, oder? *g*
Warum nicht? Wenn man immer eine 0 dort haben möchte, macht es (augenscheinlich) genau das.
Code:
scala> f.format(1244.7)
res1: java.lang.String = 0,12447E04

scala> f.format(1244.4447)
res2: java.lang.String = 0,12444E04

scala> f.format(1244.44e17)
res3: java.lang.String = 0,12444E21
Gruß
 
Hallo,

okay dann hast du natürlich recht... ich meinte das in Verbindung mit ..." wenn er als Exponent "immer" e02 haben möchte". Was natürlich nicht viel sinn macht :)

Gruß Tom
 
Zurück