청야에몽
청야의 개발 일기
청야에몽
전체 방문자
오늘
어제
  • 분류 전체보기 (156)
    • os (4)
      • Linux (4)
    • Language (32)
      • Python (15)
      • C# (6)
      • Java (11)
    • BaekJoon (92)
      • 단계별로 풀어보기 (81)
      • 누적합 (11)
    • Test (6)
      • 코딩테스트 (6)
      • 42 SEOUL (0)
    • Project (9)
      • 충돌, 피하기 게임 (8)
      • Unreal engine5 CICD 구축 (1)
    • Git & GitHUB (9)
    • Cloud (3)
      • AWS (0)
      • Azure (0)
      • Docker (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • java
  • git
  • 누적 합
  • 재귀 함수
  • 리눅스
  • Python
  • 백준
  • c#
  • docker
  • Linux
  • 자료형
  • Rebase
  • pygame
  • Revert
  • for문
  • 중첩for문
  • 파이썬
  • 누적합
  • 연산자
  • Reset

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
청야에몽

청야의 개발 일기

Language/Java

[Java] 정확한 계산 하는 방법

2022. 10. 9. 21:28
728x90

정수 연산으로 계산하기

산술 연산을 정확하게 계산하고 싶다면 실수 타입을 사용하지 않는 것이 좋다. 아래의 코드 예제를 살펴보자.

사과 1개를 0.1 단위의 10조각으로 보고, 그 중 7조각(0.7)을 뺀 3조각(0.3)을 result 변수에 저장하는 코드이다.

package ch03.sec04;

public class AccuracyExample1 {
    public static void main(String[] args) {
        //산술 연산을 실수 타입으로 한 예시
        int apple = 1;
        double pieceUnit = 0.1;
        int number = 7;

        double result = apple - number * pieceUnit;
        System.out.println("사과 1개에서 남은 양: " + result);
    }
}

//출력 결과: 0.2999999999999993

출력을 하게 된다면 result 변수의 값은 정확히 0.3이 되지 않는다. 이런 현상은 부동 소수점 방식을 사용하는 실수 타입에서 흔히 일어난다. 그렇기 때문에 이러한 현상을 방지하기 위하여 아래 예시 코드처럼 계산하는 것이 좋다.

package ch03.sec04;

public class AccuracyExample2 {
    public static void main(String[] args) {
        //산술 연산을 정수 타입으로 한 예시
        int apple = 1;
        int totalPieces = apple * 10;
        int number = 7;

        int result = totalPieces - number;
        System.out.println("10조각에서 남은 조각: " + result);
        System.out.println("사과 1개에서 남은 양: " + result/10.0);
    }
}

/*
 출력 결과
 10조각에서 남은 조각: 3
 사과 1개에서 남은 양: 0.3
*/

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'Language > Java' 카테고리의 다른 글

[Java] 연산자(비교 연산자, 논리 연산자, 비트 논리 연산자)  (0) 2022.10.19
[Java] NaN과 Infinity 처리  (0) 2022.10.14
[Java] 오버플로우와 언더플로우  (0) 2022.10.07
[Java] 부호/증감/산술 연산자  (0) 2022.10.06
[Java] 키보드 입력 데이터를 변수에 저장  (0) 2022.10.04
    'Language/Java' 카테고리의 다른 글
    • [Java] 연산자(비교 연산자, 논리 연산자, 비트 논리 연산자)
    • [Java] NaN과 Infinity 처리
    • [Java] 오버플로우와 언더플로우
    • [Java] 부호/증감/산술 연산자
    청야에몽
    청야에몽
    개인적으로 학습을 하여 까먹지 않기 위해 올리는 블로그입니다.

    티스토리툴바