Mysql 곱셈 나눗셈 정밀도 불일치 문제(나눗셈 후 4 자리 소수)

문제.
오늘 은 항목 기능 을 쓸 때 금액 을 통계 하 는 상황 이 있 고 단위 전환 이 필요 하기 때문에 다음 과 같은 기능 의 문 구 를 썼 지만 얻 은 데 이 터 는 소수점 후 4 자리 정밀도 이 고 정상 적 인 우 리 는 2 자리 만 있 으 면 충분 하 다.select total_fee / 100 from orders자 료 를 계속 조사 하고 정밀도 전환 을 하 며 한 바퀴 돌 았 던 자료 가 만 족 스 럽 지 못 하여 계속 테스트 를 진행 하 였 다.
테스트
bug 와 알 수 없 는 상황 을 테스트 하려 면,우 리 는 반드시 최소 재현,테스트 간소화,다른 문구 가 결과 에 영향 을 미 치 는 것 을 방지 합 니 다.
select 1 / 100;
//0.0100 획득
select 1 * 0.01;
//0.01 획득
또한 3/4 대의 장치 에서 실 행 됩 니 다.my sql 버 전 환경 에 따라 이 렇 습 니 다.
그래서 알 게 됐어 요. Mysql 에서 곱셈 과 나눗셈 은 소수점 후의 정밀도 가 일치 하지 않 습 니 다.
국내 포럼 에서 마땅 한 자 료 를 찾 지 못 해 해외 포럼 을 찾 아 질문 하고 교류 했다.
답안
우선 다른 선배 들 의 문제 에 대한 해답 과 조언 에 감 사 드 리 며,우리 도 가능 한 한 문제 의 조 사 를 상세 하 게 기록 할 것 입 니 다.
문명 이 이 어 질 수 있 는 이 유 는 기억 이 있 기 때문이다.글 도 더 많은 친 구 를 도 울 수 있 기 를 바 랍 니 다.
4.567917.나눗셈 의 정 도 는 기본적으로 소수점 뒤의 4 자리 이다곱셈 의 정밀도 사용 조작 수의 정밀도 와 방식 으로 판단 한다.예 를 들 어 1*0.01 정밀 도 는 소수점 뒤 0 자리 와 2 자리 입 니 다.그러면... 0+2=2 결과 도 2 비트 정밀도 사용테스트
select 1.00 * 0.01;
//결과 0.0100
상소 결론 에 부합 하 다.외국 선배 님 의 가르침 에 감 사 드 립 니 다.
나눗셈 사용 2 비트 정밀도
그러면 우리 의 문 제 는 나눗셈 으로 해결 하려 면 함수 로 정 도 를 바 꿀 수 있 습 니 다.
CAST( @x / @y AS DECIMAL(m,n) )
DECIMAL 의 매개 변 수 는 바 이 두 가 이것 을 볼 수 있 습 니 다.기본적으로 표 구 조 를 만 든 사람 은 모두 알 수 있 습 니 다.
@x 와@y 는 나 누 기와 나 누 기 입 니 다.
이 동시에 저 는 my sql 에 기본 나눗셈 정 도 를 설정 할 수 있 는 지 의문 을 제기 합 니 다.우 리 는 매번 sql 에서 함수 로 계산 하지 않 아 도 됩 니 다.
선배:가끔 의외 의 상황 이 발생 하고 싶 지 않다 면 매번 유형 전환 을 강제 해 야 한다.
mysql 관련 설명 문헌
https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html
 In division performed with /, the scale of the result when using two exact-value operands is the scale of the first operand plus the value of the div_precision_increment system variable (which is 4 by default). For example, the result of the expression 5.05 / 0.014 has a scale of six decimal places (360.714286).
나눗셈 의 정밀도 규칙
위 에서 인용 한 문헌 을 통 해 알 수 있 듯 이 두 개의 수 치 를 사용 하여 계산 할 때 결과 의 정밀도 는 첫 번 째 조작 수의 정밀도+시스템 변수 divprecision_increment 의 값 은 우리 예 에서 1 정밀도 가 0 이 고 시스템 변수 정밀도 가 4 비트 기본 값 이기 때문에 얻 은 결 과 는 4 비트 정밀도 입 니 다.
set div_precision_increment = 2;
//select 1/100 을 다시 실행 합 니 다.0.01 원 하 는 결 과 를 얻다
그래서 우 리 는 기본 변 수 를 수정 함으로써 나눗셈 의 기본 정 도 를 바 꿀 수 있다.
이때 다시 테스트 해 보 겠 습 니 다.
select 1.0 / 100;
//결과 0.010 상기 결론 에 부합
총결산
여기 서 Mysql 곱셈 나눗셈 의 정밀도 가 일치 하지 않 습 니 다.나눗셈 후 네 자리 소수 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 my sql 곱셈 나눗셈 의 정밀도 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기