2016-05-22 2 views
-3

Ich versuche, eine zufällige Dezimalzahl auf 10 Ziffern zu runden, aber ich kann nicht herausfinden, wie. Nun, das ist es, was ich ausprobiert habe und es funktioniert meistens, aber manchmal bekomme ich es auf 9 Ziffern anstatt auf 10 gerundet. Ich hoffe, jemand könnte mir helfen.Was ist der beste Weg, um ein Doppel auf 10 Ziffern zu runden?

BigDecimal bd = new BigDecimal(Math.random()).setScale(10, 0); 
double doubleVal = bd.doubleValue(); 
System.out.println(doubleVal); 

Vielen Dank im Voraus.

+1

Sie haben ein falsches Verständnis von Zahlen und deren Darstellung. Zahlen selbst (die z. B. in einer 'double'-typisierten Variablen gespeichert sind) können nicht _rounded_ oder ähnlich sein. Sie sind einfach Zahlen. Nur die textuelle Darstellung kann gerundet werden. Normalerweise machen Sie das mit einem [formatter] (https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html) oder anderen Mitteln. – Seelenvirtuose

+0

Was denkst du, was der zweite '0' Parameter im' setScale() 'Aufruf tut? Und warum denkst du so? – Andreas

+0

@Seelenvirtuose Nun, um klar zu sein, Zahlen können gerundet werden, aber ich stimme zu, dass OP nicht das ist, wonach es sucht. – Andreas

Antwort

1

Sie sagen, dass es manchmal auf 9 Ziffern gerundet wird. Kommt das etwa in 10% der Fälle vor? Denn es könnte einfach sein, dass die 10. Stelle nach dem Runden tatsächlich Null ist.

+0

Ja um 10%, weißt du, wie man es repariert? – LiziPizi

+0

Der Wert, den Sie erhalten haben, enthält nur 9 Dezimalstellen, da die 10. Dezimalstelle 0 ist. Wenn Sie den Wert drucken, wird die 10. Dezimalstelle weggelassen, da sie nicht benötigt wird. Benötigen Sie die Ausgabe der Null? –

+0

NB: Wenn Sie das brauchen, können Sie es ausdrucken mit: System.out.printf ("%. 10f \ n", doubleVal); –

Verwandte Themen