Float'ı int'e dönüştürmek için aşağıdaki satırı kullandım, ancak istediğim kadar doğru değil:
float a=8.61f;
int b;
b=(int)a;
Sonuç: 8
(Olmalı 9
)
Ne zaman a = -7.65f
sonuç: -7
(Olmalı -8
)
Bunu yapmanın en iyi yolu nedir?
Float'ı int'e dönüştürmek için aşağıdaki satırı kullandım, ancak istediğim kadar doğru değil:
float a=8.61f;
int b;
b=(int)a;
Sonuç: 8
(Olmalı 9
)
Ne zaman a = -7.65f
sonuç: -7
(Olmalı -8
)
Bunu yapmanın en iyi yolu nedir?
Yanıtlar:
Kullanıldığında Math.round()
, kayan nokta en yakın tamsayıya yuvarlanır.
(int)foo
kullanmak daha basittir.
Aslında, elde etmek istediğiniz sonuca bağlı olarak şamandırayı int'e indirmenin farklı yolları vardır: (int i
, float için f
)
round (verilen float'a en yakın tam sayı)
i = Math.round(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
not: bu, sözleşme ile, eşittir (int) Math.floor(f + 0.5f)
(yani ondalık noktadan sonra her şeyi bırak)
i = (int) f;
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
tavan / taban ( herhangi bir kesirli kısmı varsa her zaman verilen değerden daha büyük / daha küçük bir tam sayı )
i = (int) Math.ceil(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 3 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
i = (int) Math.floor(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
Pozitif değerleri yuvarlamak için (int)(f + 0.5)
, yalnızca Math.Round
bu durumlarda olduğu gibi (doc'ye göre) çalışan kullanabilirsiniz.
En yakın çift tam sayıya yuvarlamaMath.rint(f)
yapmak için de kullanabilirsiniz ; Kesirli kısmı kesinlikle .5'e eşit olan çok sayıda şamandıra ile uğraşmayı ve olası IEEE yuvarlama sorunlarına dikkat etmeyi bekliyorsanız ve setin ortalamasını yerinde tutmak istiyorsanız muhtemelen yararlıdır; Yine de, sayıların bile tek olmaktan daha yaygın olacağı başka bir önyargı sunacaksınız.
Görmek
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
daha fazla bilgi ve bazı örnekler için.
Math.round(value)
değeri en yakın tam sayıya yuvarlayın.
kullanım
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
Math.round da bir tamsayı değeri döndürür, bu nedenle tahmin etmeniz gerekmez.
int b = Math.round(float a);
Math.round(value)
Sonra yazın tamsayı döküm sonra kullanın .
float a = 8.61f;
int b = (int)Math.round(a);
Bana göre daha kolay: (int) (a +.5) // a bir Float'tır . Yuvarlanmış değer döndür.
Java Math.round () türlerine bağlı değil