ホームページ > データベース > mysql チュートリアル > PostgreSQL の整数除算で予期しない結果が生じるのはなぜですか?それを修正するにはどうすればよいですか?

PostgreSQL の整数除算で予期しない結果が生じるのはなぜですか?それを修正するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-19 15:39:10
オリジナル
159 人が閲覧しました

Why Does PostgreSQL Integer Division Produce Unexpected Results, and How Can I Fix It?

PostgreSQL での除算演算の不正確さ

PostgreSQL で除算 (/) 演算を実行する場合、結果が正しくない可能性があることに注意することが重要です。特に整数データ型を扱う場合は予想どおりです。この場合、除算によって結果がゼロに向かって切り捨てられるため、不正確な答えが生じる可能性があります。

この問題を説明するために、「dev_cost」と「sell_cost」という 2 つの整数列を持つ「software」という名前のテーブルを考えてみましょう。 「dev_cost」が 16000、「sell_cost」が 7500 の場合、次のクエリを使用して「dev_cost」を「sell_cost」で割ると、

select dev_cost / sell_cost from software ;
ログイン後にコピー

という結果が返されます。ただし、正解は 3 であり、開発コストを回収するには 3 つのソフトウェアを販売する必要があるということです。

この問題を解決するには、次のことが必要です。除算演算の値の少なくとも 1 つが浮動小数点または 10 進数のデータ型にキャストされていることを確認してください。これにより、結果の小数部分を保持したまま、正確な浮動小数点計算が可能になります。これを実現する 1 つの方法は、クエリで「dev_cost」列を 10 進数型にキャストすることです:

select cast(dev_cost as decimal) / sell_cost from software ;
ログイン後にコピー

または、PostgreSQL の型キャスト演算子を使用してキャスト操作を簡略化することもできます:

select dev_cost::decimal / sell_cost from software ;
ログイン後にコピー

最後に、最も近い整数に切り上げられた整数の結果を取得するには、 query:

select ceil(dev_cost::decimal / sell_cost) from software ;
ログイン後にコピー

これらのガイドラインに従うことで、PostgreSQL での整数の除算から生じる潜在的な不正確さを克服し、数値データに対する正確な数学的演算を保証できます。

以上がPostgreSQL の整数除算で予期しない結果が生じるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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