Як конвертувати float в Int з Java


342

Я використовував наступний рядок для перетворення float в int, але це не так точно, як хотілося б:

 float a=8.61f;
 int b;

 b=(int)a;

Результат: 8(Так і повинно бути 9)

Коли a = -7.65f, результат такий: -7(Це повинно бути -8)

Який найкращий спосіб це зробити?


16
Я мушу зазначити, що просто набір даних скорочує значення і не виконує жодних операцій з округленням / настилом на значення.
Брайан Грехем

Відповіді:


678

Використання Math.round()округляє поплавок до найближчого цілого числа.


1
чому потрібен набір тексту після Math.round ()?
некромант

81
Math.round()повертає intзначення, так що набір даних на клавіатурі (int)є зайвим
Солвек

5
використовувати або / або ... (int)fooпростіше.
yuttadhammo

31
Відповідь Солвека правильна, але я хотів би зазначити, що Math.round () може мати два різні типи виходів на основі вхідних даних. Math.round (подвійний а) повертає довгий. Math.round (float a) повертає int. docs.oracle.com/javase/7/docs/api/java/lang/…
Hososugi

2
Math.round () - повільна операція порівняно з кастингом до (int)
darkgaze

186

Насправді, існують різні способи заниження float до int, залежно від результату, який ви хочете досягти: (for int i, float f)

  • круглий (найближче ціле число до заданого поплавця)

    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

    Примітка: це, за контрактом, дорівнює (int) Math.floor(f + 0.5f)

  • обрізати (тобто скинути все після десяткової крапки)

    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
  • стеля / підлога (ціле число завжди більше / менше заданого значення, якщо воно має якусь дробову частину)

    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

Для округлення позитивних значень можна також просто використовувати (int)(f + 0.5), що працює точно так само, як і Math.Roundв тих випадках (відповідно до документа).

Ви також можете використовувати , Math.rint(f)щоб зробити округлення до найближчого парного цілого ; це, мабуть, корисно, якщо ви розраховуєте на багато поплавків з дробовою частиною, точно рівній 0,5. ви введете ще одне зміщення, хоча парні числа будуть частішими, ніж непарні.

Подивитися

http://mindprod.com/jgloss/round.html

http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

для отримання додаткової інформації та деяких прикладів.


rint - округлення банкіра; це допомагає зменшити помилки, які можуть з’являтися, якщо послідовно округляти 0,5 вгору або вниз.
профілі

@prosfilaes Я змінив формулювання і додав посилання на вікі до цієї частини відповіді.


6

Math.round також повертає ціле значення, тому вам не потрібно набирати текст.

int b = Math.round(float a);

14
Інші відповіді вже говорять про це. Будь ласка, додайте нову відповідь лише тоді, коли у вас є щось нове. (Також Math.round не повертається до інтернату.)
Джеффрі Босбум

1
Він дає пояснення про відсутність потреби введення тексту (до відповіді Сахітри). Але це може бути перетворено як коментар.
Ранджіт Кумар

5

Використовуйте Math.round(value)потім після типу киньте його на ціле число.

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

Math.round (float) повертає int, я не впевнений, для чого потрібен переклад на Int
Nephilim

-1

Як на мене, простіше: (int) (a +.5) // a - поплавок . Повернути округлене значення.

Не залежить від типів Java Math.round ()


4
Це заплутає багато розробників, які аналізують код. Не буде зрозуміло, що це округлення.
ivan.panasiuk

1
Звичайно, це просто основна математика, просто спробуйте
Бруно Л.

4
"Основна математика" - відносний термін. :) За моїм досвідом, я можу зробити ставку, що більше 50% розробників не зрозуміють, що це дійсно округлення. Це математично правильно, але, як я писав, це не ясно і іншим важко зрозуміти, що робить код.
ivan.panasiuk

2
-(int) ( PI / 3 ): спробуйте ваш код з мінусом a... з тих пір, коли -0.5потрібно проводити 0?

ви маєте рацію, якщо число від’ємне, замість цього слід додати –0,5
Бруно Л.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.