2009-05-29 20 views
23

Warum gibt dieser Code manchmal 1E + 1 zurück, während für andere Eingaben (z. B. 17) der Ausdruck nicht in wissenschaftlicher Notation gedruckt wird?Warum gibt Java BigDecimal 1E + 1 zurück?

BigDecimal bigDecimal = BigDecimal.valueOf(doubleValue).multiply(BigDecimal.valueOf(100d)).stripTrailingZeros(); 
System.out.println("value: " + bigDecimal); 

Antwort

39

Verwendung bigDecimal.toPlainString():

BigDecimal bigDecimal = BigDecimal.valueOf(100000.0) 
        .multiply(BigDecimal.valueOf(100d)) 
        .stripTrailingZeros(); 
System.out.println("plain  : " + bigDecimal.toPlainString()); 
System.out.println("scientific : " + bigDecimal.toEngineeringString()); 

Ausgänge:

 
plain  : 10000000 
scientific : 10E+6 
+0

+1 für die Bereitstellung einer tatsächlichen Lösung statt "hier ist das Problem" wie ich es tat. :) –

+0

Solche Antworten machen Stackoverflow großartig –

7

Es ist die implizite .toString() Umwandlung, was geschieht, wenn Sie das Ergebnis in System.out.println() passieren.

+0

+1 zum Zeigen auf das Problem – dfa

3

Der genaue Grund für das Verhalten von BigDecimal.toString() ist in den API doc in großen (und in der Nähe von unverständlichen) detailliert erläutert.

Um eine konsistente (und länderspezifische) Textdarstellung zu erhalten, sollten Sie DecimalFormat verwenden.

3

Es ist im Grunde, weil Sie nicht genügend signifikante Ziffern haben. Wenn Sie etwas, das nur 1 signifikante Ziffer hat, mit 100 multiplizieren, erhalten Sie etwas mit nur 1 signifikanten Ziffer. Wenn es "10" anzeigt, dann sagt das im Grunde, dass es 2 signifikante Ziffern hat. Der Weg, es nur 1 signifikante Ziffer zu zeigen, ist "1 x 10^1" zu zeigen.

die folgenden zwei Dezimalstellen haben den gleichen Wert (10), aber verschiedene „Skalen“ (wo sie signifikante Ziffern beginnen zu zählen, die oberen 2 sig Figuren hat, wobei der Boden 1 hat):

System.out.println(new BigDecimal(BigInteger.TEN, 0)); // prints 10 
System.out.println(new BigDecimal(BigInteger.ONE, -1)); // prints 1E+1 
Verwandte Themen