본문으로 바로가기

형변환 한후 더하기

category Programing/JAVA 2018. 2. 21. 19:13
반응형

 

JAVA 초보로서, 혼자 뭔가를 뚝딱뚝딱 만들고 싶은데 잘 안된다.

그런데 오늘도 하나 배움

 

JAVA에서 부동소수점의 연산은 쓰레기값때문에 별로 추천하지 않는다.

예를들어, JAVA에서 2.0 - 1.1 은 0.9가 아니다

 

  System.out.println(2.0 - 1.1); 를 해보면 결과는?

  0.8999999999999999

 

부동소수점의 연산은 2진수 연산이기때문에 쓰레기값이 존재한다고 한다.

(뭐 컴퓨터공학을 전공한사람이 아니라서 ㅠㅠ 더이상 파기는 힘들다..아무튼 그렇다고 한다.)

 

그래서 JAVA에서 부동소수점의 연산을 정확히 수행하기 위해서는..

BigDecimal이라는 기본 메소드를 이용하는게 좋다.

 

예제)

 

public class BigDecimal_exam {
 public static void main(String[] args) {
  
  String[] value = {"123.45","0.0004","1.1111","2.423","44.11"};
 
 String bb = "4/1000";
 
 BigDecimal val1 = new BigDecimal(value[0]);
 BigDecimal val2 = new BigDecimal(bb);
 
 System.out.println(val1.add(val2));

  
 }
}

 

그러나 나는!! 배열을 이용하여 정말 많은 숫자를 다루고자 하기때문에문에문에

저게 너무 귀찮다는 것을 깨닫고,

그냥 이렇게 하고자 한다.

1. 두개의 소수에 같은 값(100000)을 곱해서 정수로 만든다.

2. 두 수를 더하거나 빼는 연산을 수행한다.

3. 다시 같은수를 나눠서 (100000) 소수로 만든다.

 

public class Point_exer {
 public static void main(String[] args) {

  String lontitude = "123.4567";
  String latitude = "34.4567";

  String[] aa = { "0.0004", "0.0005", "0.0006", "0.0009" };
  String[] bb = { "1", "0", "0", "1" };
  String[] result = new String[aa.length];

  for (int i = 0; i < result.length; i++) {

   if (bb[i] == "0") {
    result[i] = String
      .valueOf(((Float.parseFloat(lontitude) * 10000 + Float.parseFloat(aa[i]) * 10000) / 10000));
   } else if (bb[i] == "1") {
    result[i] = String
      .valueOf(((Float.parseFloat(lontitude) * 10000 - Float.parseFloat(aa[i]) * 10000) / 10000));
   }

  }
  for (int i = 0; i < result.length; i++) {
   
  System.out.println(result[i]);
  }

 }

 public static String[] test(String[] a) {

  return a;

 }

}

 

해결!!!

반응형

'Programing > JAVA' 카테고리의 다른 글

JAVA 경위도 계산, 메소드 생성  (0) 2018.02.21
JAVA의 형변환  (0) 2018.02.21
다형성  (0) 2017.11.22
Public과 Private  (0) 2017.11.22
this  (0) 2017.11.13