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 は整数の除算を実行します。結果をゼロに向かって切り捨てます。 「dev_cost」と「sell_cost」は両方とも整数として定義されているため、結果は 2 に切り捨てられます。
解決策:
正しい結果を取得するには、少なくとも 1 つのオペランドは、float や 10 進数などの浮動小数点型にキャストする必要があります。これは、cast() 関数または二重コロン :: 演算子:
select cast(dev_cost as decimal) / sell_cost from software;
または
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 中国語 Web サイトの他の関連記事を参照してください。