# Vor- und Nachkommawerte eines doubles bestimmen



## y0dA (30. Okt 2007)

Hi!
Ich habe folgenden Double Wert: 1234.567, wie bekomme ich nun nur die Vorkommerwerte und die Nachkommawerte?

mfg


----------



## Der Müde Joe (30. Okt 2007)

Vor:  (int)x
Nach: x%1


----------



## y0dA (30. Okt 2007)

Der Müde Joe hat gesagt.:
			
		

> Vor:  (int)x
> Nach: x%1



Könntest du das näher ausführen, verstehe nämlich nicht so ganz


----------



## Der Müde Joe (30. Okt 2007)

ein Integer hat keine Kommastellen:

also 

double x = 1234.5678;
int y =  (int)x;  //schneidet alles nach dem Komma ab

Modulo 1....der Rest von x dividiert durch 1: also das nach dem Komma:

double nach = x%1


----------



## y0dA (30. Okt 2007)

Danke, es hat geklappt!

Was mich nun noch interessieren würde wäre, ob man mit einem Double oder einem Integer auch bestimmte Stellen des Wertes auslesen kann oder muss ich da auf String zurückgreifen?

Also bspw. möchte ich von der Vorkommastelle 1234 nur die Werte 3 und 4.


----------



## ARadauer (30. Okt 2007)

sehr schöne lösung.

Oder du wandelst es in einen String um und suchst das komma.


```
flaot f = 1234.567f;
                                String str = f+"";
		int pos = str.indexOf('.');
		System.out.println(f);
		int vorKomma = Integer.parseInt(str.substring(0, pos));
		int nachKomma = Integer.parseInt(str.substring(pos+1, str.length()));
		System.out.println(vorKomma);
		System.out.println(nachKomma);
```
 :autsch:  :autsch:  :autsch:  :autsch: 

is aber genau so schlau wie das hier *g*


```
public static boolean isNegativ(int i){
    String str = i+"";
    return (str.substring(0, 1).equalsIgnoreCase("-"));
}
```


----------



## fehlerfinder (30. Okt 2007)

y0dA hat gesagt.:
			
		

> wie bekomme ich nun nur die Vorkommerwerte und die Nachkommawerte?


1. Möglichkeit:

```
double myDouble = 1234.5678;
long vorkomma = Math.round(Math.floor(myDouble));
```
Das bringt dir aber leider nur die Vorkommastellen.

2. Möglichkeit (unter Verwendung von java.lang.String):

```
public class Doppelt
{
    public static void main(String[] args)
    {
        double myD = 1234.5678;
        String myDStr = Double.valueOf(myD).toString();

        String[] myDSplit = myDStr.split("\\.", -1);
        System.out.println("Vorkomma:" + myDSplit[0]);
        System.out.println("Nachkomma:" + myDSplit[1]);
    }
}
```
Die Strings aus myDSplit kannst du dann z.B. mit

```
Integer.valueOf(myDSplit[0])
```
wieder in eine echte Zahl verwandeln.


----------



## Der Müde Joe (30. Okt 2007)

ARadauer hat gesagt.:
			
		

> sehr schöne lösung.



aber auch sehr gefärlich....ist der double grösser als Interger.MAX_VALUE

da bittet sich Math.round(Math.floor(x)) von fehlerfinder eher an


----------

