PostgreSQL での除算 ( / ) の計算ミス
PostgreSQL で整数除算の結果が不正確になる除算の問題が発生しています。背景を詳しく調べて、問題に対処する解決策を提供しましょう。
整数の除算を理解する
「/」で示される整数の除算は、商をゼロに向かって切り捨てます。これは、2 つの整数を除算するときに、結果が最も近い整数に切り捨てられることを意味します。
指定された例では、「dev_cost」と「sell_cost」は両方とも整数です。したがって、クエリ「select dev_cost / sell_cost」は、16000 を 7500 で割った整数である 2 を返します。ただし、dev_cost を回復するにはソフトウェアの量が必要で、これは 3.
計算問題を解く
正確な値を取得するには、次のことを確認する必要があります。除算内の少なくとも 1 つのオペランドが浮動小数点または 10 進数値であること。これにより、切り捨てが防止され、小数商が生成されます。
解決策の 1 つは、「CAST」演算子を使用して列の 1 つを 10 進数にキャストすることです。
select cast(dev_cost as decimal) / sell_cost from software ;
もう 1 つの代替案は、 dev_cost 列をキャストするための「::10 進数」構文:
select dev_cost::decimal / sell_cost from software ;
これらのアプローチの両方は、必要なソフトウェアの正確な量を表す浮動小数点の結果を返します。
最も近い整数への四捨五入
結果を最も近い整数に四捨五入する場合は、 dev_cost を回復するためのソフトウェアの最小量を表す整数。「CEIL」を使用できます。 function:
select ceil(dev_cost::decimal / sell_cost) from software ;
これにより、小数点以下の結果が次の整数に切り上げられ、開発コストをカバーするのに十分なソフトウェアが確実に販売されるようになります。
以上が切り捨てを避けるために、PostgreSQL で整数の除算の結果を正しく計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。