자바 parseDouble 사용 중 주의할 점 - double형 지수 사용 안하기

2019. 7. 12. 22:22·공부/JAVA

안녕하세요, 장지랩입니다.

오늘은 회사에서 사수분이 알려준 주의할 점에 대해 공유하려고 해요.

자바 참조형변수(referrence Type) Double의 메서드인 parseDouble사용 중 주의할 점에 대해 알아보려고 합니다. 

parseDouble은 String타입의 문자열에 대해 double(기본형 변수-primitive Type,실수)으로 바꿔주는 기본 메서드인데요 

사용법은 아래와 같이 간단합니다. 

Double.parseDouble(String);

 

#다만 주의할 점이 있습니다.

Double.parseDouble로 String을 double로 변환하고, 출력해보면 순수 숫자가 아닌 알파벳과 함께 표기되는걸 볼 수 있습니다. 아래처럼요.

		String strNum  = "123456789.123";
		String strNum2 = "123456780.111";
		
		double dNum1 = Double.parseDouble(strNum);
		double dNum2 = Double.parseDouble(strNum2);
		
		System.out.println("String Type : "+strNum + "\tparseDouble : "+dNum1);
		
		System.out.println("String Type : "+strNum2+"\tparseDouble : "+dNum2);

결과 .. 지수로 표현이 되네요
String Type : 123456789.123 parseDouble : 1.23456789123E8
String Type : 123456780.111 parseDouble : 1.23456780111E8

이 상태에서 dNum1과 dNum2를 빼주면 결과는 어떻게 나올까요?

9.012가 나오는지 한번 찍어봤습니다.

System.out.println(dNum1-dNum2);

결과. 9.011999994516373

이런 예상하지 못한 결과는 시스템에 치명적인 오류를 불러 일으킨다던지, 매출등에 타격을 줄 수 있습니다.
(EX_미국,중국등의 화폐의 경우 소숫점을사용하기 때문에 문제가 생길 수 있다.)

#해결책

이를 해결하기 위해선 NumberFormat class의 setGroupingUsed(boolean) 메소드를 사용해야 합니다.

setGroupingUsed라는 메소드는 해당 숫자 포멧을 사용하는지 안하는지를 설정해주는 메소드로 매개변수에 false를 넣어주면 더이상 double에 지수표현을 사용하지 않게 됩니다.

사용법은 아래와 같습니다.

		NumberFormat format = NumberFormat.getInstance();
		
		format.setGroupingUsed(false);

		System.out.println("NumberFormat사용 1 : " + format.format(dNum1));
		System.out.println("NumberFormat사용 2 : " + format.format(dNum2));
		String result = format.format(dNum1-dNum2);
		System.out.println(result);

#결과

NumberFormat사용 1 : 123456789.123
NumberFormat사용 2 : 123456780.111
9.012

예상했던 결과가 나왔습니다.

 

전체소스와 /*출력내용*/을 마지막으로 포스팅을 마치겠습니다.

		String strNum  = "123456789.123";
		String strNum2 = "123456780.111";
		
		double dNum1 = Double.parseDouble(strNum);
		double dNum2 = Double.parseDouble(strNum2);
		
		System.out.println("String Type : "+strNum + "\tparseDouble : "+dNum1);
		
		System.out.println("String Type : "+strNum2+"\tparseDouble : "+dNum2);
		
		System.out.println(dNum1-dNum2);
		
		NumberFormat format = NumberFormat.getInstance();
		
		format.setGroupingUsed(false);

		System.out.println("NumberFormat사용 1 : " + format.format(dNum1));
		System.out.println("NumberFormat사용 2 : " + format.format(dNum2));
		String result = format.format(dNum1-dNum2);
		System.out.println(result);
/*
String Type : 123456789.123 parseDouble : 1.23456789123E8 
String Type : 123456780.111 parseDouble : 1.23456780111E8 
9.011999994516373 
NumberFormat사용 1 : 123456789.123 
NumberFormat사용 2 : 123456780.111 
9.012 
*/

 

 

 

반응형
저작자표시 (새창열림)
'공부/JAVA' 카테고리의 다른 글
  • JSMOOTH로 JAVA파일을 EXE파일로 배포하기 !
  • 자바 Exception printStackTrace를 String 객체에 담기
  • Scanner와 버퍼
  • Java File class 중..
JangGiraffe
JangGiraffe
안녕하세요~ 반갑습니다! 머무시면서 즐거운 시간 보내시길 바랍니다. 오픈카톡 : https://open.kakao.com/o/sYEBs0uh
  • JangGiraffe
    giraffe1010
    JangGiraffe
  • 전체
    오늘
    어제
    • 분류 전체보기 (390)
      • 공부 (155)
        • AI (3)
        • Spring (10)
        • JAVA (31)
        • python (6)
        • 기타 (12)
        • 메세지 (3)
        • Jsp,Servlet (4)
        • HTML (12)
        • Javascript (6)
        • C#,ASP.NET (2)
        • WEB (2)
        • DB (11)
        • Android (18)
        • [BaaS]Parse.com (4)
        • 졸업프로젝트 (4)
        • AWS,네이버클라우드플랫폼 (2)
        • Ubuntu (6)
        • maven (1)
        • 자료구조 (15)
        • 서버 (3)
      • 게임 (0)
      • 관심 (22)
        • 사진 (1)
        • 패스오브엑자일(POE) (1)
        • 월드오브워크래프트 (4)
        • 블로그 (7)
        • 이슈 (1)
        • IT (5)
        • 기타 게임 (3)
      • 자료 (2)
        • 면접 (2)
      • 먹거리 (103)
        • 음식리뷰 (99)
        • 카페리뷰 (4)
      • 여행 (35)
        • 국내여행 (23)
        • 해외여행 (12)
      • 생활정보 (68)
        • 생활정보 (33)
        • 상품리뷰 (34)
        • 세미나후기 (1)
      • 끄적끄적 (5)
        • 영화후기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 문의(카톡)
    • 방명록
  • 링크

    • 2zino
    • wildbluffer
  • 공지사항

  • 인기 글

  • 태그

    맛집
    김포맛집
    제주도맛집
    시즈오카
    ChatGPT
    강원도여행
    홍대맛집
    양양 가볼만한 곳
    왕십리맛집
    마곡맛집
    발산 회식
    와우
    돈벌기
    월드오브워크래프트
    오징어난전
    가양맛집
    강서구맛집
    발산맛집
    떡볶이
    자취
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JangGiraffe
자바 parseDouble 사용 중 주의할 점 - double형 지수 사용 안하기
상단으로

티스토리툴바