2016-06-29 1 views
1

이상한 반올림 문제가 있습니다.Mysql 5.5+에서 반올림 오류가 발생 했습니까?

CREATE TABLE `roundingtest` (
`RT_Double` DOUBLE NULL DEFAULT NULL, 
`RT_Float` FLOAT NULL DEFAULT NULL, 
`RT_Decimal` DECIMAL(10,3) NULL DEFAULT NULL 
) 
ENGINE=InnoDB; 

이제 "1.785"3 개 각 필드에 입력 여기서

는 설치 (MySQL의 5.7 CE 동일 MySQL5.5 Percona)이다.

이제이 쿼리 실행 : 하나에 소수점 반올림 경우 rounding 2

: rounding 1

누군가 설명해주십시오이 동작을 ...

여기

SELECT 
1.785, ROUND(1.785, 2), 
RT_Double, ROUND(RT_Double, 2), 
RT_Float, ROUND(RT_Float, 2), 
RT_Decimal, ROUND(RT_Decimal, 2) 
FROM roundingtest 

을 결과입니다

DECIMAL 필드를 사용할 때만 정확합니다. 소수점 세 자리 만 있습니다.

답변

2

: 대략적인 값 번호는

이 결과는 C 라이브러리에 의존한다. 많은 시스템에서 ROUND()는 "round even even even"규칙을 사용한다는 것을 의미합니다. 분수 부분의 값은 가장 가까운 짝수 정수로 반올림됩니다.

즉, 부동 소수점 숫자는 가장 가까운 짝수 정수로 반올림 될 수 있습니다. DECIMAL 숫자는 정확한 것으로 간주되므로 0.5 이상의 소수 부분은 반올림됩니다.

2

부동 소수점이 컴퓨터에 저장되는 방식 때문일 수 있습니다. 이는 완전히 정확하지는 않습니다 (기준 2에 저장 되었기 때문에 기본 10이 아님). 1.785가 1.784998로 저장되면 절사됩니다. 1.785001로 저장하면 반올림됩니다. MySQL Rounding Behaviour 가입일