12 Stimmen

Abrunden eines Double auf 5 Dezimalstellen in Java ME

Wie kann ich ein Double auf 5 Dezimalstellen runden, ohne DecimalFormat ?

15voto

Joren Punkte 14004

Sie können auf die fünfte Dezimalstelle aufrunden, indem Sie diese durch Multiplikation Ihrer Zahl zur ersten Dezimalstelle machen. Dann wird normal gerundet und wieder auf die fünfte Dezimalstelle gerundet.

Nehmen wir an, der zu rundende Wert ist ein double namens x :

double factor = 1e5; // = 1 * 10^5 = 100000.
double result = Math.round(x * factor) / factor;

Wenn Sie auf 6 Dezimalstellen runden wollen, lassen Sie factor sein 1e6 , und so weiter.

11voto

Jon Skeet Punkte 1325502

Was auch immer Sie tun, wenn Sie am Ende mit einem double Wert ist es unwahrscheinlich, dass genau 5 Dezimalstellen. So funktioniert die binäre Gleitkommaarithmetik einfach nicht. Das Beste, was Sie tun können, ist "den doppelten Wert am nächsten auf den ursprünglichen Wert, gerundet auf 5 Dezimalstellen". Wenn Sie den Wert ausdrucken genau Wert dieses Double, würde er wahrscheinlich immer noch mehr als 5 Dezimalstellen haben.

Wenn Sie realmente genaue Dezimalwerte wünschen, sollten Sie BigDecimal .

8voto

Multiplizieren Sie mit 100000. 0,5 hinzufügen. Abschneiden auf Ganzzahl. Dann durch 100000 dividieren.

Code:

double original = 17.77777777;
int factor = 100000;
int scaled_and_rounded = (int)(original * factor + 0.5);
double rounded = (double)scaled_and_rounded / factor;

3voto

Zed Punkte 55390

Wenn Sie mit externen Bibliotheken zurechtkommen, können Sie einen Blick auf Microfloat und zwar MicroDouble.toString(double d, int length) .

2voto

Arthur Ronald Punkte 32423

Versuchen Sie Folgendes

double value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.565858845));

System.out.println(value); // prints 5.56586

value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.56585258));

System.out.println(value); // prints 5.56585

Oder wenn Sie möglichst wenig Code benötigen

Verwenden Sie import static

import static java.lang.Double.valueOf;
import static java.util.Locale.US;
import static java.lang.String.format;

Und

double value = valueOf(format(US, "%1$.5f", 5.56585258));

Grüße,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X