BigInteger in Exponentialschreibweise darstellen

Carc

Neues Mitglied
Hallo,
ich würde gerne wissen, wie ich in Java BigIntegers in Exponentialschreibweise (also z.b. 5.043E+7) darstellen kann.

Nach ein wenig googeln habe ich entdeckt, dass es dafür scheinbar keinen konkreten Befehl gibt, also habe ich mir selbst ein bisschen was ausgedacht:

Java:
    BigInteger zaehler=new BigInteger("1");
    BigInteger zehn=new BigInteger("10");
    int exponent=0;
    do {exponent++;
     zaehler=zehn.pow(exponent);

    } while (zaehler.compareTo(a)<0);
    BigInteger zahl= new BigInteger("0");
    zaehler=zaehler.divide(zehn);
    zahl=a.divide(zahlz);
    exponent--;
    jTextArea1.setText(String.valueOf(a));
    jTextArea1.append("\n"+zahl+"E+"+exponent);
(a ist die zahl, die ausgegeben wird)

das Programm macht im Grunde auch das, was es soll, nur sieht das programmierte total hässlich aus, und ziemlich "zurechtgestückelt" aus.
zum beispiel wird die do-schleife einmal zuoftausgeführt, wesshalb ich später nochmal exponent-1 und zaehler:10 rechnen muss.

Außerdem wüsste ich gerne, ob ich das auch irgendwie mit kommazahlen darstellen kann, da afaik für
Java:
    zahl=a.divide(zaehler);
"zahl" eine BigInteger-variable -also keine Kommazahl-sein muss.
 
DecimalFormat kennt auch Exponenten

den letzten Absatz habe ich nicht verstanden


> BigInteger zahl= new BigInteger("0");
ist ziemlich schlimm, wenn dann für 0 nie neue Objekte, gar jedesmal aufwendig zu parsen:
BigInteger zahl= BigInteger-ZERO; // oder eigene Konstante

aber hier brauchst du ein BigInteger-Objekt vorerst gar nicht
BigInteger zahl=null;
macht dasselbe


> BigInteger zaehler=new BigInteger("1");
> BigInteger zehn=new BigInteger("10");
Konstanten bzw zaehler null..
 
Hi Carc,

ja es gibt leider keine einfache Funktion zu Darstellung der Exponentialschreibweise, aber
man kann es mit einem DecimalFormat lösen:

Code:
BigInteger bi = new BigInteger("10768768765464345");
DecimalFormat expFormat = new DecimalFormat("0.#####E0");
System.out.println(expFormat.format(bi.doubleValue()));
ergibt:

1.07688E16

Vielleicht hilft Dir das ja weiter...

Gruß, aumaster
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben