Double/Float 변환시 ClassCastException오류 NaN 해결

화면에서 컨트롤러로 파라미터 HashMap<String, String> map를 받아 double값을 형변환하려고 하는데 ClassCastException이 발생했다.
Java.lang.Integer cannot be case to Java.lang.String 이었고 원인을 찾아보니 NaN가 문제였다.

기존코드와 원인분석

1
Double fee = Double.valueOf(map.get("fee"));

원인은 바로바로 NaN이다!
화면에서 map.get(“fee”)의 값이 없어서 NaN으로 파라미터가 컨트롤러로 넘어왔다.
내 의도는 화면에서 주는 값이 없으면 서비스단에서 null을 넣는 거였는데 NaN이라 이를 Double로 형변환하려니까 ClassCastException이 발생한 것이었다.




해결

Double에서는 isNaN을 제공해준다. 이를 이용하면 된다.

1
2
3
4
5
6
//해결코드
if(Double.isNaN(Double.valueOf(map.get("fee")))){
fee = null;
} else{
fee = Double.Double.valueOf(map.get("fee"));
}

오늘도 해결!

참고