# 실수 값의 소수부 여부 판별 실수 값의 소수부분이 있는지 없는지 판별하는 좋은 방법이 있을까요?
## 간단 코드 ``` 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