PostgreSQL에서 나누기( / ) 계산이 잘못됨
PostgreSQL에서 정수 나누기가 부정확한 답변을 제공하는 나누기 문제가 발생했습니다. 배경을 살펴보고 문제를 해결하는 솔루션을 제공해 보겠습니다.
정수 나눗셈의 이해
"/"로 표시되는 정수 나누기는 몫을 0으로 자릅니다. 이는 두 개의 정수를 나눌 때 결과가 가장 가까운 정수로 반올림된다는 의미입니다.
주어진 예에서 "dev_cost"와 "sell_cost"는 모두 정수입니다. 따라서 "select dev_cost / Sell_cost" 쿼리는 16000을 7500으로 나눈 정수인 2를 반환합니다. 그러나 dev_cost인 3을 복구하려면 소프트웨어 수량이 필요합니다.
계산 문제 해결
정확한 값을 얻으려면 최소한 나눗셈의 피연산자 중 하나는 부동 소수점 또는 10진수 값입니다. 이렇게 하면 잘림이 방지되고 소수 몫이 생성됩니다.
한 가지 해결 방법은 "CAST" 연산자를 사용하여 열 중 하나를 10진수로 변환하는 것입니다.
select cast(dev_cost as decimal) / sell_cost from software ;
또 다른 대안은 dev_cost 열을 캐스팅하는 "::decimal" 구문:
select dev_cost::decimal / sell_cost from software ;
이 두 접근 방식 모두 필요한 소프트웨어의 정확한 수량을 나타내는 부동 소수점 결과.
가장 가까운 정수로 반올림
결과를 가장 가까운 정수로 반올림하려는 경우 dev_cost를 복구하기 위한 최소 소프트웨어 수량인 경우 "CEIL" 기능을 사용할 수 있습니다.
select ceil(dev_cost::decimal / sell_cost) from software ;
이렇게 하면 개발 비용을 충당할 수 있을 만큼 충분한 소프트웨어가 판매되도록 보장합니다.
위 내용은 잘림을 방지하기 위해 PostgreSQL에서 정수 나누기 결과를 올바르게 계산하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!