Java로 float를 int로 변환하는 방법


342

float를 int로 변환하기 위해 다음 줄을 사용했지만 원하는만큼 정확하지 않습니다.

 float a=8.61f;
 int b;

 b=(int)a;

그 결과는 다음과 같습니다 8(그것은해야한다 9)

a = -7.65f결과가 : -7(이 있어야한다 -8)

가장 좋은 방법은 무엇입니까?


16
타입 캐스팅만으로도 값이 잘리고 값에 대해 반올림 / 바닥 작업을 수행하지 않습니다.
Brian Graham

답변:


678

를 사용 Math.round()하면 float를 가장 가까운 정수로 반올림합니다.


1
Math.round () 다음에 typecast가 필요한 이유는 무엇입니까?
necromancer 2016 년

81
Math.round()int값을 반환 하므로 typecasting을 사용하는 (int)것이 중복됩니다.
Solvek

5
둘 중 하나를 사용하는 (int)foo것이 더 간단합니다.
yuttadhammo

31
Solvek의 대답은 맞지만 Math.round ()는 입력에 따라 두 가지 다른 출력 유형을 가질 수 있음을 지적하고 싶습니다. Math.round (double a)는 long을 반환합니다. Math.round (float a)는 int를 반환합니다. docs.oracle.com/javase/7/docs/api/java/lang/…
Hososugi

2
Math.round ()는 (int)로 캐스팅하는 것에 비해 느린 연산입니다.
darkgaze

186

실제로 달성하려는 결과에 따라 float을 int로 다운 캐스트하는 방법은 여러 가지가 있습니다. (int i, float f)

  • round (주어진 float에 가장 가까운 정수)

    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
  • ceil / floor (정수 부분이있는 경우 항상 주어진 값보다 크거나 작은 정수 )

    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)할 일 짝수의 정수 가장 가까운에 라운딩을 ; 분수 부분이 엄격하게 .5 (많은 IEEE 반올림 문제에 주목)를 가진 많은 수레를 처리하고 세트의 평균을 제자리에 유지하려는 경우 유용합니다. 그래도 짝수보다 홀수보다 더 일반적인 편견을 소개합니다.

보다

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

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

더 많은 정보와 예제가 있습니다.


rint는 은행가의 반올림입니다. 0.5를 지속적으로 올리거나 내릴 때 나타날 수있는 오류를 줄이는 데 도움이됩니다.
prosfilaes

@ prosfilaes 나는 문구를 변경하고 답변의 해당 부분에 위키 링크를 추가했습니다.


6

Math.round는 정수 값도 반환하므로 타입 변환 할 필요가 없습니다.

int b = Math.round(float a);

14
다른 답변은 이미 이것을 말합니다. 새로운 것을 추가 할 때만 새로운 답변을 추가하십시오. (또한, Math.round은 INT를 반환하지 않습니다.)
제프리 Bosboom에게

1
그는 필요없는 타입 캐스트에 대해 설명합니다 (사치 트라 답변). 그러나 주석으로 변환 될 수 있습니다.
Ranjith Kumar

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는 Float입니다. 반올림 된 값을 반환합니다.

Java Math.round () 유형에 의존하지 않음


4
이것은 코드를 분석하는 많은 개발자들을 혼란스럽게 할 것입니다. 반올림이 확실하지 않습니다.
ivan.panasiuk

1
물론 그것은 기본적인 수학 일뿐입니다. 그냥 시도해보세요
Bruno L.

4
"기본 수학"은 상대적인 용어입니다. :) 내 경험에 따르면 개발자의 50 % 이상이 실제로 반올림한다는 것을 이해하지 못할 것이라고 내기 할 수 있습니다. 수학적으로 정확하지만 내가 쓴 것처럼 명확하지 않으며 다른 사람들이 코드의 기능을 이해하기가 어렵습니다.
ivan.panasiuk

2
-(int) ( PI / 3 ): 음과 코드를 시도 a할 때부터 ... -0.5라운드에 0?

숫자가 음수이면 맞습니다. 대신 -0.5를 추가해야합니다.
Bruno L.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.