Wie kann ich ein Double auf 5 Dezimalstellen runden, ohne DecimalFormat
?
Antworten
Zu viele Anzeigen?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.
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
.
Wenn Sie mit externen Bibliotheken zurechtkommen, können Sie einen Blick auf Microfloat und zwar MicroDouble.toString(double d, int length) .
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,
- See previous answers
- Weitere Antworten anzeigen