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 중국어 웹사이트의 기타 관련 기사를 참조하세요!