2012-10-24 4 views
11

Ich versuche, eine doppelt in die ganze Zahl und DezimalstellenDoppel in integer und Dezimalstellen Trennung

So zum Beispiel zu trennen, sollte die Zahl 24,4 auf 24 getrennt werden und 4.

int integer = (int)number; 
double decimal = number-(int)number; 
System.out.println(decimal); 

Verwendung diese Methode gibt mir die folgenden Werte:

integer = 24 
decimal = 0.3999999999999986 

ich den Wert dezimal benötigen 4.

zu sein 210

Wie kann dieses Problem behoben werden?

+0

Sie können es formatieren drucke nur 1 Nachkommastelle. –

+12

Verstehst du, dass die Zahl 24.4 nicht genau als "double" dargestellt werden kann? –

+0

@Ashish Probieren Sie auch meine Lösung! Es macht Spaß! :-) – RGO

Antwort

10

Sie könnten einen String split(...) tun. Und dann Integer parseInt(...), um die zwei ganzzahligen Komponenten zurück zu bekommen.

+15

Das ist gefährlich: 2.03 wird als Dezimalteil "3" anstelle von "03" verarbeitet. –

+0

Dies ist keine gute Übung! –

4

Dies ist, weil double s nicht genau "reelle Zahlen" - erinnern Sie sich, es gibt unendlich viele reelle Zahlen in jedem Bereich, während es nur endliche Anzahl von Ziffern in double - also endliche Anzahl von Werten gibt, so einige Runde Aus muss auftreten.

Tatsache ist, 24.4 kann nicht genau durch double dargestellt werden - so der Anteil Ihrer Zahl wirklich etwas ist, um 0,3999 ....
Wenn Sie eine exakte Lösung wollen - sollten Sie eine Bibliothek verwenden, die Sie genaue Werte gibt für Dezimalzahlen wie BigDecimal.

Wenn Sie mehr über dieses Thema von double s verstehen wollen, ist nicht genau - Sie sollen mehr über floating points arithmetics lesen und this article, obwohl hohe Niveau, ist auch ein Muss, um wirklich zu verstehen, was los ist.

Wenn Sie diesen Artikel noch nicht verstehen können - nur in Betracht ziehen: Wenn Sie einen genauen Wert benötigen - double s kann es nicht bieten - und Sie sollten eine Bibliothek verwenden, wenn dies der Fall ist.

5

Abhängig von der Anzahl der Dezimalstellen, können Sie diese Methode verwenden:

double number = 24.4; 

int integer = (int)number; 
double decimal = (10 * number - 10 * integer)/10; 

System.out.println(decimal); 

Erläuterung: Entfernen Sie die Dezimalstellen, führen Sie die Subtraktion, und schließlich das Komma wieder zurück in seine ursprüngliche Lage!

+2

Diese Technik schlägt in über 90% der Fälle fehl. – EJP

+1

@EJP * Abhängig von der Anzahl der Dezimalziffern! * Bitte zeigen Sie mir einen Fall an, wenn nur eine Dezimalziffer vorhanden ist. – RGO

+0

Es gibt keine exakte Darstellung für 0.1. Wie kann es möglicherweise funktionieren? Probieren Sie es für 24.1 bis 24.9. – EJP

0

Zuerst finden Sie die Zahl der Nachkommastellen, und mit dieser Anzahl von 10 müssen Sie multiplizieren. zB: x = 26.78621 dann multipliziere mit 100000 [hier kannst du nicht multiplizieren wie x * 10, wieder x * 10 usw. (5 mal), das erste Mal multiplizieren mit 10, es gibt dir 267.862199999 ..] Nach der Multiplikation subtrahiere 2600000 vom Ergebnis. hier ist ein link deiner antwort, den ich code habe. https://stackoverflow.com/a/18517555/2508414

1

! [Hier ist meine Lösung] [1]

hier meine Lösung ist. habe ich eine einfache Methode in C-Programmierung, die Bruchzahl in zwei ganzen Zahlen zu teilen ... Hier unten der Kodex ist

#include<stdio.h> 
void main() 
{ 
float x=24.56; int y=(int)x; float z=(x-y)*1000000000; int zd=(int)z; 
printf("%lf",x); 
printf("\ninteger Part %d\n",y); 
printf("\nDecimal Part %d\n",zd); 
} 

Ausgabe


24.559999 integer Teil 24

Dezimalteil 559999488

1

Hier ist eine kleine Methode, die ich schrieb, dies zu erreichen:

/** 
* 
* @param n 
* @return 
*/ 
private static double getFractionalPart(double n) {  
    if (n > 0) { 
     return n - Math.floor(n); 
    } else { 
     return ((n - Math.ceil(n)) * -1); 
    } 
} 
0

Wie RGO erwähnt, können Sie das tun und auch rund um die Dezimalzahl um um den passenden Wert zu erhalten. Ex:

double number = 20.57; 

int integer = (int)number; 
double decimal = (10 * number - 10 * integer)/10; 
double temp = Math.round(decimal*100.0)/100.0; 
System.out.println("Int = " + integer + "\nDecimal = " + temp); 
1
double number = 20.57; 
Double.valueOf(String.valueOf(number)).intValue() 
0

Sie können dies tun:

Einsatz 1000 3 Fraktionen erhalten:

zum Beispiel:

(1.2445 - 1) * 100 = 0.244 
Verwandte Themen