Java: Wie bekomme ich den Teil nach dem Komma?

8

Ich habe eine double Variable d = 1.15 .

Ich möchte die Zahl nach dem Dezimalpunkt, d. h. "15".

Was ist der beste Weg, um dies in Java zu erreichen?

Ich habe es so versucht:

%Vor%

Aber ich habe die richtige Antwort nicht erhalten, denn wenn ich d.toString() umwandle, lautet die Antwort 14.999999999999986 .

Bitte helfen Sie. Danke.

    
user1023675 17.01.2012, 06:17
quelle

8 Antworten

10

versuche das,

%Vor%

Jetzt hat diese VariableD den Wert 24

    
Lucifer 17.01.2012 06:23
quelle
8

Versuchen Sie Math.floor ();

%Vor%

Um Rundungsfehler zu vermeiden, könnten Sie sie in BigDecimal

umwandeln %Vor%

Druckt 0,2400

Beachten Sie, dass die 4 in setScale die Anzahl der Ziffern nach dem Dezimaltrennzeichen ('.')

ist

Um den Rest als Integer-Wert zu haben, könnten Sie dies zu

ändern %Vor%

Druckt 24

    
stacker 17.01.2012 06:27
quelle
5

Die Zahl hinter dem Komma ist kein gut definiertes Konzept. Zum Beispiel für "4.24" könnte es "0.24", "0.2399999999999" (oder ähnlich), "24" oder "239999999999" sein.

Sie müssen klar sein, wenn Sie über eine Zahl oder eine Folge von Dezimalziffern sprechen ... und ob der Eingabewert eine Darstellung einer binären Gleitkommazahl ist (in diesem Fall ist "4.24" höchstwahrscheinlich eine Annäherung) ) eine dezimale Gleitkommazahl.

Abhängig von Ihrer Interpretation wird die richtige Antwort anders sein.

  

Aber ich habe die richtige Antwort nicht bekommen, denn wenn ich d.toString () konvertiert habe, lautet die Antwort 14.999999999999986.

Sie stoßen auf das Problem, dass double und float Basis-2-Gleitkommaformate sind, und in den meisten Fällen können sie KEINE dezimalen Gleitkommazahlen darstellen. Es gibt keine Lösung dafür ... außer etwas wie BigDecimal zu verwenden, um deine Zahlen darzustellen. (Und selbst dann ist ein gewisser Genauigkeitsverlust möglich, wenn Sie eine Divisions- oder Modulo-Operation durchführen.)

    
Stephen C 17.01.2012 06:31
quelle
1

Wenn Ihr Double ist:

%Vor%

Und wenn Sie das tun:

%Vor%

dann wird number 25 sein.

Ich weiß nicht, ob dies der beste Weg ist, aber es funktioniert.

    
Peter 18.08.2013 11:08
quelle
0

Hast du d = d%1.0 ausprobiert? Das sollte den Rest von Division d durch 1 zurückgeben, was nur der Dezimalanteil sein sollte.

Sie können dies auch tun, um den Wert als int: d = (int)((d%1.0)*100)

zu erhalten     
aoi222 17.01.2012 06:22
quelle
0

Wenn Sie die Dezimalstellen möchten und das Ergebnis runden möchten.

%Vor%

druckt

%Vor%

Wenn Sie einen gerundeten Wert wünschen, müssen Sie bestimmen, welche Genauigkeit Sie wünschen.

%Vor%     
Peter Lawrey 17.01.2012 06:45
quelle
0

Versuchen Sie anstelle von d.toString() :

%Vor%     
Ted Hopp 17.01.2012 06:58
quelle
0

Wie in jeder anderen Sprache: multipliziere mit 10 und überprüfe den int-Teil des Rests, wenn du durch 10 dividierst. Genau so würdest du Zahlen aus einer ganzen Zahl extrahieren.

%Vor%

Beachten Sie jedoch, dass Sie für das Doppelte ein Genauigkeitslimit einführen müssen - die maximale Anzahl der zu extrahierenden Ziffern (max_len aus dem obigen Codebeispiel).

Geringfügige Aktualisierung (zusätzliche Rundung am Rand der Genauigkeit):

%Vor%     
Andrei LED 17.01.2012 06:22
quelle

Tags und Links