Java2 - [데이터형] double 데이터타입 연산 문제
목록 추천  
추천수:
제 목 [데이터형] double 데이터타입 연산 문제
작성자 박세청 작성일 2014/01/14 22:51


[데이터형] double 데이터타입 연산 문제

 

 

import java.math.BigDecimal;

public class BigDecimalTest {

 

    public static void main(String[] args) {
  
        //수학적으로 처리되는 연산 결과
        System.out.println("올바른 연산값: 2.00 - 1.10 = 0.9");
  
       //double 데이타형은 가장 가까운 값으로 잘못 연산되어 진다.
       System.out.println("double타입 비정상 연산: 2.00 - 1.10 = " +(2.00 - 1.10));
  
      //정확한 연산을 위해 BigDecimal 이용 해야 한다. 주의 사항은 문자열(string 형)으로 BigDecimal을 생성해야 한다.
      System.out.println("BigDecimal.valueOf()로 데이터 타입 변환 후 정상 연산: "

                             +(BigDecimal.valueOf(2.00).subtract(BigDecimal.valueOf(1.10))));
      System.out.println("BigDecimal(\"문자열\")로 데이터 타입 변환 후 정상 연산: "

                             +(new BigDecimal("2.00").subtract(new BigDecimal("1.10"))));
  
      //BigDecimal을 이용했지만 double로 값지정으로 잘못된 연산이 이루어 진다.
      System.out.println("BigDecimal타입 비정상 연산: "

                             +(new BigDecimal(2.00).subtract(new BigDecimal(1.10))));
  
     //BigDecimal생성시 문자열의 최대 소숫점자리수가 지정된 기준으로 결과값의 소숫점자리가 지정된다.
      System.out.println("BigDecimal 타입연산결과 문자열기준으로 소숫점 표시1: "

                             +(new BigDecimal("2.000").subtract(new BigDecimal("1.10"))));
      System.out.println("BigDecimal 타입연산결과 문자열기준으로 소숫점 표시2: "

                             +(new BigDecimal("2.00").subtract(new BigDecimal("1.100"))));
     }

}

 

===> 실행결과

 

올바른 연산값: 2.00 - 1.10 = 0.9


double타입 비정상 연산: 2.00 - 1.10 = 0.8999999999999999


BigDecimal.valueOf()로 데이터 타입 변환 후 정상 연산: 0.9


BigDecimal("문자열")로 데이터 타입 변환 후 정상 연산: 0.90


BigDecimal타입 비정상 연산: 0.899999999999999911182158029987476766109466552734375


BigDecimal 타입연산결과 문자열기준으로 소숫점 표시1: 0.900


BigDecimal 타입연산결과 문자열기준으로 소숫점 표시2: 0.900





이전글 PHP base_convert() 함수 JAVA 변환
다음글 jar- war- ear 분류

목록 추천