2017-10-04 3 views
0

Bitte helfen Sie mir, die Ausgabe von BigDecimal zu setzen. Zum Beispiel: Ich brauche die Ausgabe von Zahlen mit einer Länge von weniger als 8 Ziffern wie folgt: "12345678", und wenn mehr als: "1,2345Е + 9".BigDecimal Ausgabe mit korrektem Format

Methoden

toPlainString(); 
toEngineeringString(); 
toString(); 

arbeiten nicht wie erwartet:

57657657657453646587980887663654676580,24545346565476767645 57657657657453646587980887663654676580,24545346565476767645 57657657657453646587980887663654676580,24545346565476767645

:

public class TestBigDecimalOutput { 
     public static void main(String[] args) { 

      BigDecimal d = new BigDecimal("57657657657453646587980887663654676580.24545346565476767645"); 
      String outPlainString = d.toPlainString(); 
      String outEngineeringString = d.toEngineeringString(); 
      String outString = d.toString(); 

      System.out.println(outPlainString); 
      System.out.println(outEngineeringString); 
      System.out.println(outString); 
     } 
    } 

-Code unten nächste Ausgabe macht

Gib mir einen Hinweis, was mache ich falsch?

Antwort

0

Nach meinem besten Wissen (und ich hoffe ich bin falsch) können Sie nicht eine BigDecimal render in einer bestimmten Weise machen. Es gibt keinen Weg (den ich kenne), um wissenschaftliche oder technische Notation zu verwenden, oder um zu kontrollieren, wann dies der Fall ist. Die technische Notation wird nur mit der Zahl "benötigt einen Exponenten" verwendet und die Umstände, unter denen ein Exponent benötigt wird, werden in der Dokumentation für BigInteger.toString() erläutert. Ich finde die Erklärung schwierig zu folgen, ehrlich gesagt, und ich war nie in der Lage herauszufinden, wie man das Verhalten einem nützlichen Muster in einer Anwendung folgen lässt.

Ich habe festgestellt, dass es einfacher ist, einfach nicht zu versuchen, und die Nummer selbst zu formatieren. Das bedeutet das Extrahieren der Mantisse und des Exponenten in der Basis 10 und dann das Verketten als Strings mit einem "E" zwischen den Komponenten. Der Mantissenteil muss wahrscheinlich abgerundet werden. Wenn Sie den Exponenten (in der Basis 10) kennen, können Sie aus seiner Größe herausfinden, ob er den von Ihnen gewünschten Schwellenwert überschreitet, um wissenschaftliche Notation zu verwenden. Ist dies nicht der Fall, können Sie BigDecimal.toPlainString() verwenden, eventuell mit einer geeigneten Rundung.

Die technische Notation kann auf die gleiche Weise gehandhabt werden, wobei der Exponent jedoch auf das nächste Vielfache von drei gerundet wird und die Mantisse zur Kompensation angepasst wird.

Es gibt eine nützliche Bibliothek 1, die die notwendigen Logarithmus- und Leistungsoperationen ausführen kann, oder sehen Sie sich diese Frage 2 für einige Vorschläge an.

Ich habe Code, der diese Sachen macht, die ich ziemlich gerne teile, aber es ist viel zu lang, und ich kann nicht versprechen, dass es Produktionsqualität oder sogar lesbar ist.