2012-04-03 8 views
6

Ich benutze Math.round und ich finde, dass es mir keinen Wert größer als (2^32/2) -1 zurückgibt, aber die Dokumentation gibt an, dass es lange Werte zurückgeben kann, dh 2^64 ... Da unten ein Codeausschnitt.Math.round MAX retournierbarer Wert

long bTmp = (long)Math.round(4294967296L); 
System.out.println(bTmp); 
System.out.println(Long.MAX_VALUE); 

die Ausgabe:

2147483647 
9223372036854775807 

Bin ich etwas fehlt?

Antwort

11

Es ruft die Überlast von Math.round() auf, die eine float nimmt und eine int zurückgibt. Siehe the javadoc.

Versuchen:

Math.round((double) 4294967296L) 
+2

nur einige Informationen über hinzufügen, was zu tun ist: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls- 5.1.2 Standardmäßig gibt es eine Erweiterung von Long auf Float. Um das Verhalten mit double zu erzwingen, muss es gegossen werden. –