간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

지도 API 좌표값 소숫점 자르기 ( double형 소수값  자릿수 자르기 )
SPRING BOOT/WhiteRecord

지도 API 좌표값 소숫점 자르기 ( double형 소수값 자릿수 자르기 )

2022. 1. 28. 11:16
728x90

지도 API를 활용해 키워드 검색 후, 가게 정보를 가져올 수 있었다.

 

사진에는 보이지 않지만 input hidden으로 선택한 업체의 x 좌표와 y 좌표를 가져온다.

 

 

문제는 x좌표와 y좌표를 소수점 뒤 10자리수 까지 가져온다는 것이다.

 

ex) 

37.13254642344 , 127.2132132143

 

DB에 넣기에는 자릿수가 너무 길어져서 부담이 되어, 뒤의 소수점자리를 자르고 싶었다.

 

좌표에서 소수점뒤의 6자리수 이상부터는 실제로 10cm정도의 차이정도만 있다고 하니, 

 

소수점 뒤에 6자리까지만 잘라주면 되겠다.

 

 

Java

 

1. Math.round()

		double num = 123.4567891011; 
        
        double test = Math.round(num);

		double result1 = Math.round(num * 100) / 100.0; 
		System.out.println(result1);

 

Java의 Math.round() 함수는 실수의 소숫점 첫번째자리를 반올림해서 정수로 나타내주는 반올림함수이다.

 

123.456~ 에 100을 곱하면, 12345.678~

 

소수점 첫번째 자리에서 반올림을하면 12346 이 되겠다.

 

이걸 다시 100으로 나눠주면 123.46 으로 출력된다.

 

이렇게 원하는 소숫점을 반올림해서 나타낼 수 있겠다.

 

 

 

2. String.format()

 

double num = 123.4567891011;

String result = String.format("%.2f", num);

 

다음은 String에서 제공하는 format 메서드를 이용한다.

 

따로 설명이 필요없을 정도로 매우 간단하다.

 

단! double형으로 받은 좌표가 String으로 변환되기 때문에, DB의 컬럼에 신경쓸 필요가 있다.

 

난 varchar와 같은 문자형이 아닌 NUMBER 타입으로 좌표 컬럼을 만들었기 때문에 해당 방법은 사용하지 않았다.

 

 

3.DecimalFormat

double num = 123.4567891011;

DecimalFormat df = new DecimalFormat("0.00");

String result = df.format(num);

 

DeciamlFormat 함수는 #.## 의 형태로 숫자형 포맷을 출력할 수 있도록 해주는 클래스이다.

 

매우 편하지만, 마찬가지로 String으로 출력되기 때문에 사용하진 않았다.

 

형 변환을 해주면 되긴 하겠지만.. 다른 방법이 있는데 굳이 돌아갈 필요는 없겠다.

 

 


나는 double형으로 좌표를 받아서, DB에 넣을 목적이 였기 때문에 DB에 잘라진 소숫점만 들어가면 되는 상황이였다.

 

ajax를 이용해 좌표데이터를 주고 받았는데,

 

먼저 js를 이용해 프론트단에서 잘라서 데이터를 보낼 수도 있을 것이고,

 

java를 이용해 백단에서 데이터를 DB로 옮길 수도 있었다.

 

하지만 이번엔 DB에서 처리를 해서 데이터를 저장했다.

 

 

 

오라클을 기준으로 실수도 저장이 가능한 NUMBER타입 컬럼에 (10, 6)의 값을 줘서 소숫점을 나눠주었다.

 

 최대 10자리 자릿수까지 표시하고, 소숫점아래는 최대 6자리까지 표시하겠다는 것이다.

 

만약 123456789.123456789 라는 소숫점이 있다면 123456789.1 

1234567.1234567 이 있다면 1234567.123 이렇게 표시되겠다.

 

이것은 고정 소수점 방식인데, 

고정 소수점 방식은 (자리수 지정)
특정 위치에 소수점을 고정해 놓고 그 앞자리에는 실수의 정수부를 뒷자리에는 실수의 소수부를 나타내는 방식이다
예를 들어, 8비트로 실수를 나타낸다면 8비트의 앞 4비트는 정수부를, 뒤 4비트는 소수부를 나타낸다고 미리 약속을 해놓는 것이다.
 
부동 소수점 방식은 ( 자리수 지정x ) 
고정 소수점 방식과는 다르게 소수점이 말 그대로 떠다니면서 실수를 표현하는 방식이다.
주어진 실수를 x * 2y꼴로 표현한 후, x, y를 저장하는 방식으로 수를 저장한다.
부동소수점 방식은 굉장히 넓은 범위의 숫자를 표현할 수 있으면서도 (상대적으로) 높은 정밀성을 보장한다.
 

이 외에도 DB에는 부동 소수점 방식으로 좌표를 통째로 집어넣고,

 

필요에 따라 select문에서

 

- ROUND 함수 소수점 둘째자리 반올림

select ROUND( [소수값], 2) from dual;

 

 

- TRUNC함수 소수점 둘째자리 이후로 버림

select TRUNC( [소숫값] , 2) from dual;

이렇게 select 결과값에서 나눠주는 방법도 있겠고,

 

TO_CHAR() 로 DATE 값을 원하는 포맷으로 나타내듯이 소숫값의 자리수를 잘라줄 수도 있겠다.

 

프론트, 백 , DB 필요에 따라 상황에 따라 최적의 방법을 찾아내보자. 

728x90
저작자표시 (새창열림)

'SPRING BOOT > WhiteRecord' 카테고리의 다른 글

HttpURLConnection을 이용한 API 데이터 받아오기  (0) 2022.02.07
[스프링부트] 에디터 이미지업로드 시 임시폴더로 분리하기  (0) 2022.02.05
스프링부트 Scheduler  (4) 2022.01.28
CK에디터로 올린 이미지에서 썸네일 뽑아내기 ( 정규식 )  (1) 2022.01.28
WhiteRecord 프로젝트 시작  (0) 2022.01.10
    'SPRING BOOT/WhiteRecord' 카테고리의 다른 글
    • [스프링부트] 에디터 이미지업로드 시 임시폴더로 분리하기
    • 스프링부트 Scheduler
    • CK에디터로 올린 이미지에서 썸네일 뽑아내기 ( 정규식 )
    • WhiteRecord 프로젝트 시작
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바