베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • BFS
    • 코드업
    • java
    • 스레드
    • 함수형인터페이스
    • 데이터베이스
    • 자바8
    • jpa
    • 백준
    • dfs
    • 토비스프링
    • Spring
    • 운영체제
    • 자바
    • C++
    • leetcode
    • 스프링
    • 알고리즘
    • 이펙티브자바
    • 스프링시큐리티

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    개발서적/Effective Java

    [Effective Java] 정확한 답이 필요하다면 float와 double은 피하라

    2023. 6. 2. 08:15

    부정확한 계산

    float와 double 타입은 과학과 공학 계산용으로 설계되었다. 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다. 예를 들어 1.03달러에서 42센트를 썻을 때 남은 금액을 표현해보자.

    System.out.println(1.03 - 0.42) 

    이 코드는 0.61000000000001을 출력한다.

    정확한 계산

    이런 문제를 올바로 해결하려면 BigDecimal, int혹은 long을 사용해야 한다. 특히 금융권에서는 float와 double은 사용하지 말자.

    BigDecimal

    앞의 코드를 double이 아닌 BigDecimal을 사용하면 문제가 해결된다. 하지만 기본 타입보다 쓰기 훨씬 불편하고 느리다는 단점이 있다.

    BigDecimal의 대안으로 int 혹은 long타입을 쓸 수 있지만, 다룰 수 있는 값의 크기가 제한되고, 소수점을 직접 관리해야 한다.  위와 같은 예제에서는 달러 대신 센트로 수행하면 이 문제가 해결된다.

    public static void main(String[] args){
        int itemsBought = 0;
        int funds = 100;
        for (int price = 10; funds >= price; price += 10) {
            funds -= price;
            itemsBought++;
        }
    }
    저작자표시 비영리 변경금지 (새창열림)
      '개발서적/Effective Java' 카테고리의 다른 글
      • [Effective Java] 객체는 인터페이스를 사용해 참조하라
      • [Effective Java] 박싱된 기본 타입보다는 기본 타입을 사용하라
      • [Effective Java] 라이브러리를 익히고 사용하라
      • [Effective Java] 전통적인 for 문보다는 for-each 문을 사용하라
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바