> 데이터 베이스 > MySQL 튜토리얼 > 잘림을 방지하기 위해 PostgreSQL에서 정수 나누기 결과를 올바르게 계산하려면 어떻게 해야 합니까?

잘림을 방지하기 위해 PostgreSQL에서 정수 나누기 결과를 올바르게 계산하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-12-17 10:39:24
원래의
196명이 탐색했습니다.

How Can I Correctly Calculate the Result of Integer Division in PostgreSQL to Avoid Truncation?

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

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