2016-09-21 4 views
4

내가 4 소수점으로 더블을 절단하기 위해 노력하고있어 잘라내는 대신 값을 수정하는 것입니다,하지만 난 둥근 마지막 자리를 얻을 수 (및 이중 만 4 개 소수가 있어요!)MySQL의 TRUNCATE (더블, 4)

더블 : -2.5805는

SELECT TRUNCATE(double, 4) FROM `table` 

결과 : -2.5804

무엇보다 흥미로운 것은 즉 :

SELECT TRUNCATE(mycol, 4) AS col1, TRUNCATE(-2.5805, 4) AS col2 
FROM mytable 

반환 :

col1 | col2 
--------+-------- 
-2.5804 | -2.5805 

Demo here

답변

3

이중 데이터 형식이 숫자는 정확한 숫자로 저장되지 않습니다 의미하는 부동 소수점 형식입니다. floating point types에 MySQL의 문서가 설명 하듯이 : 부동 소수점 값은 대략적인 정확한 값으로 저장되지 않습니다

때문에, 같은 정확한 비교는 문제가 발생할 수 있습니다에 그들을 치료하려고 시도합니다. 또한 플랫폼 또는 구현 종속성의 영향을받습니다.

즉, -2.5805은 숫자로 저장 될 때 정확한 숫자가 아닙니다. 그러나 truncate() 함수는 정확한 자릿수의 정확한 숫자를 반환합니다. (더블 등) -2.5805가 확장 될 때, 4 소수점 숫자는 MySQL은 정확한 데이터 형식 소수점 데이터 유형으로 numeric literals expressed with fixed number of decimal digits을 취급하기 때문에 TRUNCATE(-2.5805, 4) 표현 -2.5805을 반환 4.

입니다. 따라서 truncate() 함수는 단순히 같은 수의 10 진수를 반환합니다.