# 실수 값의 소수부 여부 판별
실수 값의 소수부분이 있는지 없는지 판별하는 좋은 방법이 있을까요?
haesamq님의 답변
## 간단 코드
```
private static String d2s(double x) {
return String.format(x == (int) x ? "%.0f" : "%.6f", x);
}
```
## IEEE 754 부동소수점 기준
single precision - sign 1bit, exponent 8bit, mantissa 23bit
double precision - sign 1bit, exponent 11bit, mantissa 52bit
exponent값은 single precision의 경우 127을 빼고, double precision의 경우 1023을 뺍니다.
mantissa는 맨 첫 비트가 2^(-1), 두 번째가 2^(-2), 세 번째가 2^(-3)
따라서 mantissa가 0이 될때까지 left shift를 수행한 횟수를 n이라 하면,
single precision은 (exponent - 127) >= n, double precision은 (exponent - 1023) >= n 이면
소수이하의 자리가 존재하지 않게 됩니다.
### 검증 예제 1
```
2.5 = 0 10000001 10100000000000000000000
exp = 129 - 127 = 2
mantissa = 1/2 + 1/8
value = (2 ^ (2)) * (1/2 + 1/8) = 2.5
```
mantissa가 0이되기 위한 left shift 횟수 : 3
exp = 2
exp 가 작으므로 소수 이하의 자리가 존재...
### 검증 예제 2
```
5 = 0 10000010 10100000000000000000000
exp = 130 - 127 = 3
mantissa = 1/2 + 1/8
value = (2 ^ (3)) * (1/2 + 1/8) = 5
```
mantissa가 0이되기 위한 left shift 횟수 : 3
exp = 3
exp 가 크거나 같으므로 소수 이하의 자리 존재하지 않음
## 레퍼런스
+ https://plus.google.com/+SoftgearKo/posts/4Z2WW466VG6