ホームページ > データベース > mysql チュートリアル > PostgreSQL の整数除算が間違った結果を返すのはなぜですか?

PostgreSQL の整数除算が間違った結果を返すのはなぜですか?

Linda Hamilton
リリース: 2024-12-27 22:58:12
オリジナル
326 人が閲覧しました

Why Does PostgreSQL Integer Division Return Incorrect Results?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート