Java에서 정수를 float로 어떻게 변환 할 수 있습니까?


81

두 개의 정수 xy. 나는 계산해야하고 x/y결과로 나는 부유물을 얻고 싶습니다. 예를 들어 3/2나는 1.5를 원합니다. 나는 쉬운 (또는 유일한) 방법은 그것을 변환하는 것입니다 할 생각 xy플로트 식으로. 안타깝게도 쉬운 방법을 찾을 수 없습니다. 저를 도와 주 시겠어요?


7
float 결과 = ((float) x) / y?
mibollma 2010

이것을 확인하십시오 : xahlee.org/java-a-day/casting.html
fasseg 2010


1
@VinAy : 이 경우에는 권장 하지 않습니다 . BigDecimal은 (는) 보편적으로 올바른 대체가 아닙니다 float.
Matt Ball

1
@VinAy : 전적으로 목적이 무엇인지에 따라 다릅니다. 그가 금융을하고 있다면 당신 말이 맞습니다. 그가 소행성 궤적을 계산하고 있다면 당신은 그렇지 않습니다.
Marquis of Lorne

답변:


152

피연산자 중 하나 이상을 float 로 캐스트 하면됩니다.

float z = (float) x / y;

또는

float z = x / (float) y;

또는 (불필요)

float z = (float) x / (float) y;

다음보다 더 효율적입니까? float z = (1.0 * x) / y; ? float 변환이 내부적으로 곱셈보다 더 효율적입니까? Tnx!
MSquare

1
모르겠지만 99 % 이상은 무관하다고 생각합니다. 원격으로도 병목 현상이 발생하지 않습니다. 정말 그렇게 걱정된다면 직접 벤치마킹하십시오.
Matt Ball

1
첫 번째와 두 번째는 특정 arm 장치에서 오류를 유발하므로 두 정수를 모두 캐스트해야합니다.
Oliver Dixon

java.lang.Integer는 java.lang.Float로 캐스트 될 수 없습니다.
asp

2
@ user3002853은 박스형과 기본형에 대해 읽었습니다. docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Matt Ball

5

꼭 필요한 경우가 아니면 float를 사용하면 안됩니다. 99 %의 경우 double이 더 나은 선택입니다.

int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);

인쇄물

f= 111111.12
d= 111111.1111

@Matt의 의견에 따라.

float는 정밀도가 매우 낮고 (6-7 자리) 상당히 쉽게 반올림 오류를 나타냅니다. double에는 또 다른 9 자리의 정확도가 있습니다. float 대신 double을 사용하는 비용은 99 %의 경우 명목상이지만 반올림 오류로 인한 미묘한 버그 비용은 훨씬 더 높습니다. 이러한 이유로 많은 개발자는 부동 소수점을 전혀 사용하지 않는 것이 좋으며 BigDecimal을 강력히 권장합니다.

그러나 현명한 반올림이 사용되는 경우 대부분의 경우 double을 사용할 수 있습니다 .

이 경우 int x는 32 비트 정밀도를 갖는 반면 float는 24 비트 정밀도를 가지며 1로 나누어도 반올림 오류가 발생할 수 있습니다. 반면 double은 53 비트의 정밀도를 가지고 있으며 이는 합리적으로 정확한 결과를 얻기에 충분합니다.


6
보다 나은 이유에 대해 자세히 설명해야합니다 . doublefloat
Matt Ball

5

추가 계산에 참여하기 전에 첫 번째 값을 float로 전송하기 만하면됩니다.

float z = x * 1.0 / y;

4

// 변환하려는 정수

int myInt = 100;

// 정수를 부동으로 캐스팅

float newFloat = (float) myInt

1
적어도 Android Studio에서는 컴파일러가이를 시도하는 호환되지 않는 유형에 대해 불평 할 것입니다.
Adam R. Turner


1

Sameer :

float l = new Float(x/y)

x와 y의 정수 나눗셈을 먼저 계산 한 다음 여기에서 부동 소수점을 생성하므로 작동하지 않습니다.

float result = (float) x / (float) y;

의미 상 가장 좋은 후보입니다.


귀하의 답변은 의견이어야합니다. Sameer는 귀하의 게시물에 대한 알림을받지 않습니다. 의미 적으로 결과를 계산하기 전에 두 int를 float로 변환하는 것은 불필요합니다. 따라서 하나만 변환하는 것보다 낫지 않습니다. 그것은 잘못된 인상을 주므로 열등합니다, imho.
사용자 알 수 없음
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.