Java ile float int'ye nasıl dönüştürülür


342

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.65fsonuç: -7(Olmalı -8)

Bunu yapmanın en iyi yolu nedir?


16
Sadece tiplemenin değeri kısalttığını ve değer üzerinde herhangi bir yuvarlama / döşeme işlemi gerçekleştirmediğini belirtmeliyim.
Brian Graham

Yanıtlar:


678

Kullanıldığında Math.round(), kayan nokta en yakın tamsayıya yuvarlanır.


1
neden Math.round () 'dan sonra yazım gerektirir?
Necromancer

81
Math.round()döner int, böylece kullanan typecasting değer veren (int)gereksizdir.
Solvek

5
/ veya ... yöntemlerini (int)fookullanmak daha basittir.
yuttadhammo

31
Solvek'in yanıtı doğrudur, ancak Math.round () girişine göre iki farklı çıktı türüne sahip olabileceğini belirtmek isterim. Math.round (çift a) uzun döndürür. Math.round (float a) bir int döndürür. docs.oracle.com/javase/7/docs/api/java/lang/…
Hososugi

2
Math.round (), (int) 'ye göre yavaş bir işlemdir
darkgaze

186

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.Roundbu 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.


rint bankacının yuvarlanmasıdır; sürekli olarak 0,5 yukarı veya aşağı yuvarlarsanız ortaya çıkabilecek hataları azaltmaya yardımcı olur.
prosfilaes

@prosfilaes İfadeyi değiştirdim ve cevabın o kısmına bir wiki bağlantısı ekledim.

15

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;

6

Math.round da bir tamsayı değeri döndürür, bu nedenle tahmin etmeniz gerekmez.

int b = Math.round(float a);

14
Diğer cevaplar zaten bunu söylüyor. Lütfen yalnızca yeni bir yanıt eklemek istediğinizde yeni bir yanıt ekleyin. (Ayrıca, Math.round int döndürmez.)
Jeffrey Bosboom

1
Gereksiz tiplendirme hakkında açıklama yaptı (Sachithra cevabına). Ancak yorum olarak dönüştürülebilir.
Ranjith Kumar

5

Math.round(value)Sonra yazın tamsayı döküm sonra kullanın .

float a = 8.61f;
int b = (int)Math.round(a);

Math.round (float) bir int döndürür, int'e almanın neden gerekli olduğundan emin değilim
Nephilim

-1

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


4
Bu, kodu analiz eden birçok geliştiriciyi karıştırır. Yuvarladığı belli değil.
ivan.panasiuk

1
Tabii ki, bu sadece temel matematik, sadece deneyin
Bruno L.

4
"Temel matematik" göreceli bir terimdir. :) Deneyimlerime göre, geliştiricilerin% 50'sinden fazlasının gerçekten yuvarlamadığını anlamayacağına bahse girebilirim. Matematiksel olarak doğru, ancak yazdığım gibi, net değil ve başkalarının kodun ne yaptığını anlaması zor.
ivan.panasiuk

2
-(int) ( PI / 3 ): Bir negatif kodunuzu deneyin ane zamandan beri ... -0.5mermi için 0?

sayı negatifse haklısın, bunun yerine -0,5 eklemelisin
Bruno L.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.