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.