반응형
UPDATE some_table SET some_float_field=1919.987 WHERE id=123
SELECT * FROM some_table WHERE id=123
여기서 some_float_field는 "float"(특정 크기 값 없음)로 정의 된 필드입니다.
예상 결과 값은 1919.987이됩니다. 대신 1919.99로 반올림됩니다.
왜? 32 비트 (단일 정밀도) 플로트는이를 올바르게 저장하기에 충분한 정밀도를 가지고 있습니다!
해결 방법
쿼리를 실행할 때 :
SELECT * FROM some_table WHERE id = 123
사용자 인터페이스를 사용하여 부동 소수점 숫자를 형식화합니다. 사용중인 인터페이스는 두 개 이상의 문자를 사용하고 있습니다. 결국 표시 할 "올바른"번호에 대한 정보가 없습니다.
숫자를 문자열 또는 십진수로 형식화하여 인터페이스가 올바른 숫자를 표시하도록 할 수 있습니다. 예를 들면 :
select format(some_float_field, 3)
이것을 소수점 세 자리의 문자열로 변환합니다. 주의 사항 : 원하지 않는 쉼표도 추가됩니다. 이것은 또한 작동합니다.
select cast(some_float_field as decimal(8, 3))
트릭도해야합니다.
다음과 같은 작업을 수행하여 데이터가 올바른지 쉽게 확인할 수 있습니다.
select *
from some_table
where some_float_field between 1919.987 - 0.0001 and 1919.987 + 0.0001;
부동 소수점 값에 =
를 사용하고 싶지는 않지만 이미 이해하고 있습니다.
참조 페이지 https://stackoverflow.com/questions/23120584
반응형
'MySql' 카테고리의 다른 글
MySQL 멀티 스레딩 및 데이터베이스 연결 (0) | 2020.12.06 |
---|---|
MySQL SQL 주입을 방지하기 위해 mysql_real_escape_string을 어디에 사용합니까? (0) | 2020.12.06 |
MySQL 사용자가 로그인 할 때 updated_at 열을 업데이트하는 방법은 무엇입니까? (0) | 2020.12.06 |
MySQL에서 모든 이벤트를 삭제하는 방법 (0) | 2020.12.06 |
MySQL pymysql (DictCursor)로 데이터 가져 오기 (0) | 2020.12.06 |
댓글