블랙베어 MYPI

블랙베어
접속 : 3798   Lv. 55

Category

Profile

Counter

  • 오늘 : 108 명
  • 전체 : 132235 명
  • Mypi Ver. 0.3.1 β
[Java 프로그래밍] 자바 공부중인데 아시는분 조언좀 ;ㅅ; (14) 2014/02/26 PM 04:45
34살에 직종을 바꾸고 공부하려니 죽겠네요 으으....
다름이 아니라 아래와 같이 코딩을 하였는데

public class EqualityExample2 {

public static void main(String[] args) {

float num1 = Math.abs(1.1f) + Math.abs(2.2f);
float num2 = Math.abs(3.3f);
if (num1 == num2)
System.out.println("같은 수 입니다.");
if (num1 != num2)
System.out.println("다른 수 입니다." + num1 + "입니다.");
}
}

결과 값이
"다른 수 입니다.3.3000002입니다."
라고 나오네요....

빅데시멀 이용하면 해결 된다는데 이용하지 않고 해결하려면 어떻게 해야될까요?
인터넷을 아무리 찾아봐도 빅데시멀 사용하라는데...학원 선생님은 다른 방법으로 해결가능하다는데 가능한가요?
double을 사용하면 오차값이 더 커지는데.. 으으...

신고

 

블랙베어    친구신청

math를 이용하면 해결될까 해서 사용했는데 안되네요 ㅠㅠ

편안한 집    친구신청

float은 부동소수점 타입이라, 정확도가 존재하고 계산에 항상 오차가 조금씩 존재합니다. 저런 오차때문에 직접 비교를 할 수 없습니다.

float 상수형으로 EPSILON = 0.0001f; 같은거 하나 선언하시고, 두 수의 차이가 이 수 이하로 날 경우 같다고 판단하게 하면 됩니다.

블랙베어    친구신청

아 그러면 되군요! 해보고 결과 답글 하겠습니다!^^

블랙베어    친구신청

편안한집님 조언주셔서 감사하구요 해결되었습니다 ㅋㅋㅋ

블랙베어    친구신청

음 아니면 소수점 둘째자리까지 나오게 한 뒤 결과 값에 대한 합산에 대해서
비교하면 될듯한데.... 이 부분은 코드를 모르겠네요 데헷

Erevos    친구신청

지금 Math를 사용하시면 소수점 둘째짜리에서 round로 반올림하시거나 버림하시거나 해서 그 자릿수까지만 비교하면 되지 않나요?

블랙베어    친구신청

네 그래서 버림하는 방법으로 해결했습니다 ㅎㅎㅎ

Gotal    친구신청

부동소숫점은 근사값 까지만 표현된다는걸 알려주려고선생님께서 문제를 낸 것 같네요 ㅋㅋ

부동소숫점에 대해 좀 더 검색 해 보시면 좋은정보 얻어가실껍니다

블랙베어    친구신청

이거 검색하면서 혼자 해결할려고 찾으면서 읽다 보니 확실히 공부가 되네요
ㅇㅅㅇ!!

O.NO.RE    친구신청

num1, num2를 float으로 해야한다는 조건이 없다면 int로 해보는건 어떨까요?

블랙베어    친구신청

int로 하면 정수라서 double나 float로 해야지만 소수점이 나오더라구요 ㅎㅎㅎ

BIT컴돌이    친구신청

자바는 잘 모르겠습니다만....sprintf 이런게 사용가능하면 sprint문을 이용하는것도 괜찮을듯 싶습니다. %2.2f 형태로 소수점이하 3째자리에서 반올림 처리 자바는 char배열을 String으로 쓰던가? 그곳에 넣어둔뒤에 atof로 불러와서 비교하는것도....저도 많이 부족한개발자라서...

블랙베어    친구신청

저도 워낙 초보자라서요... 그래도 컴돌이님이 잘하시는듯해요^^
위에 코드 사용한대로 해서 해결되었습니다 ㅎㅎ

블랙베어    친구신청

이코드로 해보니 해결이 되네요 ㅋ

package day1;
public class EqualityExample2 {



public static void main(String[] args) {

double num1 = Double.parseDouble(String.format("%.4f", 1.1 + 2.2));
double num2 = Double.parseDouble(String.format("%.4f", 3.3));


if (num1 == num2)
System.out.println("같은 수 입니다.");
if (num1 != num2)
System.out.println("다른 수 입니다." + num1 + "입니다.");
}



}
X