-
[Java 프로그래밍] 자바 공부중인데 아시는분 조언좀 ;ㅅ;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을 사용하면 오차값이 더 커지는데.. 으으...
댓글 : 14 개
- 블랙베어
- 2014/02/26 PM 04:45
math를 이용하면 해결될까 해서 사용했는데 안되네요 ㅠㅠ
- 편안한 집
- 2014/02/26 PM 04:51
float은 부동소수점 타입이라, 정확도가 존재하고 계산에 항상 오차가 조금씩 존재합니다. 저런 오차때문에 직접 비교를 할 수 없습니다.
float 상수형으로 EPSILON = 0.0001f; 같은거 하나 선언하시고, 두 수의 차이가 이 수 이하로 날 경우 같다고 판단하게 하면 됩니다.
float 상수형으로 EPSILON = 0.0001f; 같은거 하나 선언하시고, 두 수의 차이가 이 수 이하로 날 경우 같다고 판단하게 하면 됩니다.
- 블랙베어
- 2014/02/26 PM 04:55
아 그러면 되군요! 해보고 결과 답글 하겠습니다!^^
- 블랙베어
- 2014/02/26 PM 05:24
편안한집님 조언주셔서 감사하구요 해결되었습니다 ㅋㅋㅋ
- 블랙베어
- 2014/02/26 PM 04:55
음 아니면 소수점 둘째자리까지 나오게 한 뒤 결과 값에 대한 합산에 대해서
비교하면 될듯한데.... 이 부분은 코드를 모르겠네요 데헷
비교하면 될듯한데.... 이 부분은 코드를 모르겠네요 데헷
- Erevos
- 2014/02/26 PM 05:01
지금 Math를 사용하시면 소수점 둘째짜리에서 round로 반올림하시거나 버림하시거나 해서 그 자릿수까지만 비교하면 되지 않나요?
- 블랙베어
- 2014/02/26 PM 05:24
네 그래서 버림하는 방법으로 해결했습니다 ㅎㅎㅎ
- Gotal
- 2014/02/26 PM 05:06
부동소숫점은 근사값 까지만 표현된다는걸 알려주려고선생님께서 문제를 낸 것 같네요 ㅋㅋ
부동소숫점에 대해 좀 더 검색 해 보시면 좋은정보 얻어가실껍니다
부동소숫점에 대해 좀 더 검색 해 보시면 좋은정보 얻어가실껍니다
- 블랙베어
- 2014/02/26 PM 05:25
이거 검색하면서 혼자 해결할려고 찾으면서 읽다 보니 확실히 공부가 되네요
ㅇㅅㅇ!!
ㅇㅅㅇ!!
- O.NO.RE
- 2014/02/26 PM 05:09
num1, num2를 float으로 해야한다는 조건이 없다면 int로 해보는건 어떨까요?
- 블랙베어
- 2014/02/26 PM 05:25
int로 하면 정수라서 double나 float로 해야지만 소수점이 나오더라구요 ㅎㅎㅎ
- BIT컴돌이
- 2014/02/26 PM 05:23
자바는 잘 모르겠습니다만....sprintf 이런게 사용가능하면 sprint문을 이용하는것도 괜찮을듯 싶습니다. %2.2f 형태로 소수점이하 3째자리에서 반올림 처리 자바는 char배열을 String으로 쓰던가? 그곳에 넣어둔뒤에 atof로 불러와서 비교하는것도....저도 많이 부족한개발자라서...
- 블랙베어
- 2014/02/26 PM 05:26
저도 워낙 초보자라서요... 그래도 컴돌이님이 잘하시는듯해요^^
위에 코드 사용한대로 해서 해결되었습니다 ㅎㅎ
위에 코드 사용한대로 해서 해결되었습니다 ㅎㅎ
- 블랙베어
- 2014/02/26 PM 05:26
이코드로 해보니 해결이 되네요 ㅋ
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 + "입니다.");
}
}
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 + "입니다.");
}
}
user error : Error. B.