PostgreSQL의 나누기 문제: 나누기(/)가 잘못된 결과를 반환하는 이유
PostgreSQL에서 정수 열이 있는 나누기를 계산하려고 하면 사용자가 다음과 같은 문제를 겪을 수 있습니다. 예상치 못한 결과를 만나다. 다음 시나리오를 고려하십시오.
문제:
"software"라는 테이블에 "dev_cost" 및 "sell_cost" 열이 포함되어 있습니다. dev_cost를 회수하기 위해 판매해야 하는 소프트웨어의 수량을 결정하려고 합니다. "dev_cost"가 16000이고 "sell_cost"가 7500인 경우 결과는 3이 될 것으로 예상됩니다. 그러나 쿼리
select dev_cost / sell_cost from software;
는 대신 2를 반환합니다.
원인:
PostgresSQL은 정수 나누기를 수행합니다. 결과를 0으로 자릅니다. "dev_cost" 및 "sell_cost"는 모두 정수로 정의되므로 결과는 2로 잘립니다.
해결책:
올바른 결과를 얻으려면 적어도 하나 피연산자는 부동소수점 또는 소수점 같은 부동 소수점 유형으로 캐스팅되어야 합니다. 이는 Cast() 함수나 이중 콜론 :: 연산자:
select cast(dev_cost as decimal) / sell_cost from software;
or
select dev_cost::decimal / sell_cost from software;
를 사용하여 수행할 수 있습니다. 또는 다음을 사용하여 결과를 가장 가까운 정수로 반올림할 수도 있습니다. 천장() 함수:
select ceil(dev_cost::decimal / sell_cost) from software;
데모:
[SQLFiddle 데모](https://www.sqlfiddle.com/#!17/23da8/1)
위 내용은 PostgreSQL 정수 나누기가 잘못된 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!