프로그램 에서 두 개의 Double 유형 에 오차 가 발생 하 는 해결 방법
double n = 171.6;
double m = 28.17;
double k = n + m;
이치 에 따 르 면 k 의 수 치 는 199.77 이 어야 하지만 사실은 199.7699999998 이다.우리 시스템 에는 소수 자릿수 를 4 자리 로 유지 하고 있 으 며,이치 에 따 르 면 반올림 하여 199.77 로 할 수 있다.그러나 금액 의 합계 가 있 기 때문에 수 십,심지어 수백 개의 데 이 터 를 더 한 것 이다.두 개의 수 를 더 할 때 이런 오차 가 발생 할 수 있 기 때문에 마지막 에 얻 은 결 과 는 0.7 에 가 까 운 오차 가 있 기 때문에 반올림 을 하 더 라 도 도움 이 되 지 않 는 다.
인터넷 에서 관련 자 료 를 찾 아 보 니 CSDN 게시판 의 이 게시 물의 설명 이 비교적 상세 하 다 고 생각 합 니 다.http://bbs.csdn.net/topics/300023952대 의 는 연산 할 때 진법 전환 을 해서 생 긴 것 이다(8 층 답장 참조).모든 정밀도 유형 은 거의 모든 언어 에서 이 문제 가 있다.비교적 효과 적 인 해결 방법 은 BigDecimal(14 층 답변 참조)을 사용 하 는 것 이다.그러나 나 는 개인 적 으로 그 BigDecimal 의 해결 방법 이 너무 번거롭다 고 생각한다.적어도 나의 시스템 에 있어 서 는 이렇다.차라리 한 번 더 추가 한 후에 문자열 변환 을 하고 효과 적 인 소수 자릿수 를 유지 하 는 것 이 좋 습 니 다.예 를 들 어 상기 문 구 는 다음 과 같이 바 꿀 수 있 습 니 다.
double n = 171.6;
double m = 28.17;
//double k = n + m;
String kn = (n + m).ToString("N4"); // 4
double k = Convert.ToDouble(kn);
즉,String kn 이라는 단계 에서 오 차 를 조정 하고 얻 은 k 값 이 정확 합 니 다.이렇게 매번 오 차 를 처리 하면 몇 개의 데이터 의 합 계 를 계산 하 더 라 도 오차 가 너무 큰 상황 이 발생 할 까 봐 걱정 할 필요 가 없다.물론 이런 처리 방법 을 하나의 공용 방법 으로 만들어 두 수의 합 을 처리 하 는 것 이 가장 좋다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
프로그램 에서 두 개의 Double 유형 에 오차 가 발생 하 는 해결 방법오늘 자신 이 만 든 시스템 에서 이상 한 현상 을 발견 했다.몇 개의 Double 유형의 데 이 터 를 더 하면 마지막 에 얻 은 금액 은 정확 한 수치 보다 항상 몇 마 오 가 적다.프로그램의 계산 방법 에 문제...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.