# Long umwandeln und auf 2 Dezimalen runden?



## Fretful (7. Mai 2006)

Habe ne long zahl die die Millisekunden speichert, möchte nun aber zu den stunden kommen zahl / (3600*1000) und dann diese Kommazahl auf 2 dezimalen genau runden... bei mir wird immer alles weggeschnitten hinten oO 
mfg
Fretful


----------



## byte (7. Mai 2006)

Die gleiche Frage habe ich doch erst heute Vormittag beantwortet. Naja, was solls:

Der Operator / geht standardmäßig von ints aus und schneidet daher alle Dezimalstellen weg (= ganzzahlige Division ohne Rest). In Deinem Fall musst Du daher schreiben:


```
(double)zahl / (3600*1000);
```


----------



## jobu0101 (7. Mai 2006)

Fretful hat gesagt.:
			
		

> Habe ne long zahl die die Millisekunden speichert, möchte nun aber zu den stunden kommen zahl / (3600*1000) und dann diese Kommazahl auf 2 dezimalen genau runden... bei mir wird immer alles weggeschnitten hinten oO
> mfg
> Fretful



longs können außerdem gar keine Dezimalstellen haben! Von daher musst du sowieso den Typ umwandeln!


----------



## Fretful (7. Mai 2006)

jo, das is mir schon klar, aber wie runde ich auf 2 dezimalen ?


----------



## jobu0101 (7. Mai 2006)

Fretful hat gesagt.:
			
		

> jo, das is mir schon klar, aber wie runde ich auf 2 dezimalen ?



Du multiplizierst mit 100, rundest und teilst danach wieder durch 100!


----------



## byte (7. Mai 2006)

Oder wenns Dir um die Ausgabe geht:


```
DecimalFormat dc = new DecimalFormat("#.##");
System.out.println(dc.format(double));
```

Dann haste auch nen Komma als Dezimaltrennzeichen und kannst noch weiteren Schnickschnack einstellen.


----------



## thE_29 (8. Mai 2006)

(double)zahl / (3600*1000);

Man könnte auch gleich machen


zahl / (3600.0d*1000.0d);


das . steht für Komma (no na net) und das .d für double!

Man könnte auch .f für float nehmen!

Dadurch wird hinten schon mit double gerechnet und man kann sich vorne den cast sparen ^^


----------



## byte (8. Mai 2006)

OK, wenn Du ganz genau sein willst, dann kann man Deine Form auch nochmal kürzen: 


```
zahl / (3600.*1000.);
```

Der einfache dezimale Punkt reicht, dass die Zahl als double interpretiert wird. :bae:


----------



## thE_29 (8. Mai 2006)

Jo, das .d mache ich immer, weil ich manchmal mit float arbeite und er dann mekkert, float und double..

:bae:

Aber recht hast du


----------



## Leroy42 (8. Mai 2006)

byto hat gesagt.:
			
		

> OK, wenn Du ganz genau sein willst, dann kann man Deine Form auch nochmal kürzen:
> 
> ```
> zahl / (3600.*1000.);
> ```





			
				Leroy hat gesagt.:
			
		

> OK, wenn Du es *noch* kürzer haben willst, reicht es einen _Partner_ zu doublen.
> 
> ```
> zahl / (3600.*1000);
> ```


 :bae:


----------



## jobu0101 (8. Mai 2006)

Leroy42 hat gesagt.:
			
		

> byto hat gesagt.:
> 
> 
> 
> ...



Runden nicht vergessen!


```
Math.round(zahl / 360000000.)*100;
```


----------



## Fretful (15. Mai 2006)

Leroy42 hat gesagt.:
			
		

> byto hat gesagt.:
> 
> 
> 
> ...


---> ich bekomme ca. 30 nachkommastellen --- hilfe ! will aber nur 2


----------



## Fretful (15. Mai 2006)

ups doppelpost!


----------



## michi2 (15. Mai 2006)

Math.round(zahl / (3600.*10)/100
So einfach gehts! Math.round(double d) rundet auf den Punkt. (Darum *100 /100, erste 100 kürtzt sich raus!)


----------



## jobu0101 (15. Mai 2006)

Fretful hat gesagt.:
			
		

> ---> ich bekomme ca. 30 nachkommastellen --- hilfe ! will aber nur 2



Ich habe dir doch vorher schon die Lösung gepostet!



			
				jobu0101 hat gesagt.:
			
		

> ```
> Math.round(zahl / 360000000.)*100;
> ```


----------

