Gibt es eine Methode, um die .
in Java in einen double
Wert zu entfernen?Wie Dezimal in Java entfernen, ohne die verbleibenden Ziffern zu entfernen
Beispiel:
56.11124
zu
5611124
Gibt es eine Methode, um die .
in Java in einen double
Wert zu entfernen?Wie Dezimal in Java entfernen, ohne die verbleibenden Ziffern zu entfernen
Beispiel:
56.11124
zu
5611124
Ich glaube nicht, dass es eine mathematische Methode, um herauszufinden, wie viele Dezimalstellen dort in einem Doppel ist. Sie können den Punkt auf eine String
, ersetzen konvertieren und dann zurück konvertieren:
Double.parseDouble(Double.toString(56.11124).replace(".", ""));
Seien Sie der Überläufe vorsichtig, wenn Sie das Ergebnis analysieren aber!
Dies könnte
class Example {
public static void main(String[] args) {
double val = 56.1112;
while((double)((int)val) != val)
{
val *= 10;
}
System.out.printf("%.0f", val);
}
}
Output arbeiten:561112
Dies wird durch Gießen des Doppels in int Werke, die 56.11124 => 56
die schwebenden Informationen abschneidet. Während die Werte nicht gleich sind, multiplizieren Sie sie mit der Basis, um das .
heraus zu drücken. Ich weiß nicht, ob das der beste Weg ist.
dies gibt '56' aus, aber das OP will' 5611124', also ist dies keine helfende Antwort überhaupt ... – Lino
@Lino an welchem Punkt druckt der obige Codeschnipsel 56? Ich ging voran und machte ein voll funktionsfähiges Beispiel, falls es nicht offensichtlich ist. –
Sie haben Recht, ich habe die while-Schleife übersehen :) – Lino
Sie können BigDecimal
umwandeln und verwenden Sie die unscaledValue
Methode:
BigInteger unscaled = new BigDecimal(myDouble).unscaledValue();
auf Ihrem beabsichtigten Ausgang Je, können Sie auch BigDecimal#valueof(double)
verwenden, um die Zwischen BigDecimal
zu erstellen.
Javadoc for BigDecimal#new(double)
Seien Sie vorsichtig, wenn Sie den Doppelkonstruktor mit großer Dezimalzahl verwenden, da die Javadoc-Angabe unvorhersehbar sein kann ... – Lino
Das stimmt, aber nur bei Verwendung literaler Werte ('new BigDecimal (0.1) '). Wenn es mit einer bereits existierenden Variable verwendet wird, sollte es funktionieren ('new BigDecimal (myDouble)') – kewne
tut es nicht;) versuche folgendes Snippet, es gibt true aus. "doppelt d = 0,1; BigDecimal bigDecimal = neu BigDecimal (d); System.out.println (bigDecimal.doubleValue() == 0.1000000000000000055511151231257827021181583404541015625); '' – Lino
Hier ist eine Möglichkeit, es zu tun,
Zuerst das doppelte in eine Zeichenfolge konvertieren. Rufen Sie dann replace
auf, um .
durch eine leere Zeichenfolge zu ersetzen. Danach, analysieren das Ergebnis in int:
double d = 5.1;
String doubleString = Double.toString(5.1);
String removedDot = doubleString.replace(".", "");
int result = Integer.parseInt(removedDot);
Offensichtlich würde dies nicht funktionieren, wenn die Stringdarstellung des Doppel in wissenschaftlicher Notation wie 5e16
ist. Dies funktioniert auch nicht bei ganzzahligen doppelten Werten, wie 5
, da seine String-Darstellung 5.0
ist.
double
s sind von Natur aus ungenau. 5
und 5.0
sind der gleiche Wert. Aus diesem Grund können Sie diese Art von Operation nicht wirklich durchführen. Erwarten Sie unterschiedliche Ergebnisse für a
und b
?
double a = 5;
double b = 5.0;
Wenn Sie das tun, dann können Sie nicht wirklich das tun, da es keine Möglichkeit zu wissen, ist, was der Programmierer genau zur Laufzeit geschrieben.
können Sie wandeln es in ein String
und die .
entfernen und wandeln es wieder in double
so etwas wie
double value = 56.11124;
value = Double.valueOf(("" + value).replace(".", "")).doubleValue();
wird 5.611.124,0 diese Rückkehr seit seiner ein verdoppeln Sie die Floating-Point haben. Sie können es in eine int
konvertieren, aber Sie müssen auf den möglichen Überlauf achten. Sonst würde es so aussehen:
int normalized = (int) value;
@Downvoter Care zu erklären, warum? –
Umwandlung in String und den Punkt ersetzen? – Jens
Duplizieren, z.B. https://stackoverflow.com/questions/4030928/extract-digits-from-a-string-in-java – Jodn
@Jodn Diese Frage ist kein Duplikat, obwohl es verwandt ist. – marstran