Java에서는 double을 정수로 변환하고 싶습니다.
double x = 1.5;
int y = (int)x;
y = 1을 얻습니다. 이렇게하면 :
int y = (int)Math.round(x);
당신은 2를 얻게 될 것입니다. 그러나 저는 궁금합니다. 정수의 이중 표현이 때때로 1.9999999998 같은 것처럼 보이기 때문에 Math.round ()를 통해 생성 된 double을 캐스팅하면 여전히 잘린 숫자가 될 가능성이 있습니까? 우리가 찾고있는 반올림 된 숫자보다 (즉 : 표시된 코드에서 2 대신 1)?
(예, 그렇습니다. x에 대한 값 이 있습니까? 여기서 y는 x의 반올림 대신 잘린 결과를 표시합니까?)
그렇다면 : 잘림 위험없이 double을 둥근 int로 만드는 더 좋은 방법이 있습니까?
뭔가 생각했습니다 : Math.round (x)는 double이 아닌 long을 반환합니다. 따라서 Math.round ()가 3.9999998과 같은 숫자를 반환하는 것은 불가능합니다. 따라서 int (Math.round ())는 아무것도자를 필요가 없으며 항상 작동합니다.
답변
더블 생성 비아를 캐스팅
Math.round()
하면 여전히 숫자가 잘릴 가능성이 있습니까?
아니요, round()
항상 double을 올바른 값으로 반올림 한 다음 long
소수점 이하 자릿수를 자르는 로 캐스트됩니다 . 그러나 반올림 후에는 분수 부분이 남아 있지 않습니다.
다음은 문서입니다 Math.round(double)
.
인수에 가장 가까운 long을 반환합니다. 결과는 1/2을 더하고 결과의 바닥을 취한 후 결과를 long 유형으로 캐스트하여 정수로 반올림됩니다. 즉, 결과는 표현식의 값과 같습니다.
(long)Math.floor(a + 0.5d)
답변
데이터 유형의 경우 Double
에 int
, 다음을 사용할 수 있습니다 :
Double double = 5.00;
int integer = double.intValue();
답변
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
내 목적을 해결했습니다.