2017-07-25 2 views

Antwort

4

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!

+1

Kann jemand die Downvotes erklären? Wenn Sie eine bessere Lösung haben, teilen Sie sie bitte mit. – marstran

+0

@Jens und so? ^^ das ist, was fragt der Benutzer ^^ entfernen Sie den Punkt macht das Doppel zu einem anderen – azro

+0

Das ist wahr @ScaryWombat. Fest. – marstran

1

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.

+0

dies gibt '56' aus, aber das OP will' 5611124', also ist dies keine helfende Antwort überhaupt ... – Lino

+0

@Lino an welchem ​​Punkt druckt der obige Codeschnipsel 56? Ich ging voran und machte ein voll funktionsfähiges Beispiel, falls es nicht offensichtlich ist. –

+0

Sie haben Recht, ich habe die while-Schleife übersehen :) – Lino

0

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)

Javadoc for BigDecimal#valueOf(double)

Javadoc for BigDecimal#unscaledValue()

+0

Seien Sie vorsichtig, wenn Sie den Doppelkonstruktor mit großer Dezimalzahl verwenden, da die Javadoc-Angabe unvorhersehbar sein kann ... – Lino

+0

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

+0

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

1

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.

+0

variieren, dass die wissenschaftliche Notation nur zu einem Wert hinter den Szenarien konvertiert. '5e3' ist gleich' 5000'. Ihre Antwort funktioniert also auch für die wissenschaftliche Notation – Lino

+0

@Lino Nein, für größere Zahlen macht 'toString' es in wissenschaftliche Notation. – Sweeper

-1

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; 
+0

@Downvoter Care zu erklären, warum? –

Verwandte Themen