> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL 정수 나누기가 예상치 못한 결과를 생성하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

PostgreSQL 정수 나누기가 예상치 못한 결과를 생성하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-19 15:39:10
원래의
127명이 탐색했습니다.

Why Does PostgreSQL Integer Division Produce Unexpected Results, and How Can I Fix It?

PostgreSQL의 나누기 연산 부정확성

PostgreSQL에서 나누기(/) 연산을 수행할 때 결과가 그렇지 않을 수 있다는 점에 유의하는 것이 중요합니다. 예상대로, 특히 정수 데이터 유형을 다룰 때 그렇습니다. 이 경우 나눗셈에서 결과가 0으로 잘려 오답이 나올 수 있습니다.

이 문제를 설명하기 위해 "dev_cost" 및 "sell_cost"라는 두 개의 정수 열이 있는 "software"라는 테이블을 생각해 보세요. "dev_cost"가 16000이고 "sell_cost"가 7500인 경우 다음 쿼리를 사용하여 "dev_cost"를 "sell_cost"로 나누면

select dev_cost / sell_cost from software ;
로그인 후 복사

결과 2가 반환됩니다. 그러나 정답은 3입니다. 개발 비용을 회수하려면 소프트웨어 3개를 판매해야 합니다.

이 문제를 해결하려면 다음이 필요합니다. 나누기 연산의 값 중 하나 이상이 부동 소수점 또는 소수 데이터 유형으로 캐스팅되었는지 확인하세요. 이를 통해 결과의 소수 부분을 보존하면서 정확한 부동 소수점 계산이 가능합니다. 이를 달성하는 한 가지 방법은 쿼리에서 "dev_cost" 열을 10진수 유형으로 캐스팅하는 것입니다.

select cast(dev_cost as decimal) / sell_cost from software ;
로그인 후 복사

또는 PostgreSQL 유형 캐스팅 연산자를 사용하여 캐스팅 작업을 단순화할 수 있습니다.

select dev_cost::decimal / sell_cost from software ;
로그인 후 복사

마지막으로 가장 가까운 정수로 반올림된 정수 결과를 얻으려면 다음 내에서 ceil() 함수를 사용할 수 있습니다. 쿼리:

select ceil(dev_cost::decimal / sell_cost) from software ;
로그인 후 복사

이러한 지침을 따르면 PostgreSQL의 정수 나누기로 인해 발생할 수 있는 부정확성을 극복하고 수치 데이터에 대한 정확한 수학 연산을 보장할 수 있습니다.

위 내용은 PostgreSQL 정수 나누기가 예상치 못한 결과를 생성하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿