実現したいこと
整数と少数の掛け算を正しく計算したいです。
発生している問題
以下のクエリをストアドファンクション内で実行したとき、想定した結果と異なる結果が戻ってくる場合があります。
-- valueはストアドの引数で受け取るnumeric型の値 SELECT ROUND((value * 100), 1)
試したこと
value = 「0.0005」の場合、「0」になりNG。
value = 「0.005」の場合、「0」になりNG。
value = 「0.05」の場合、「5」になりNG。
上記の結果から、int型である100に引っ張られてる気がしたので、以下のようなキャストも試しましたがダメでした。
SELECT ROUND((value * CAST(100 as numeric), 1)) SELECT ROUND((value * (1.0 * 100)), 1)
上記SELECT文をクエリツールで単体で実行すると想定通りの結果を返すことから、ストアド化による影響だと考えていますが、理由がわかりません。よろしくお願いします。
補足情報
PostgreSQL Ver.12
> value = 「0.0005」の場合、「0」になりNG。
これもどう出ることを想定していたのかがわかりません。
この記事をご確認ください: PostgreSQLのround()の話 - Qiita https://qiita.com/fujii_masao/items/c79575fb57827f658063 <引用>PostgreSQLでは、引数のデータ型によりround()の挙動が異なり、round(NUMERIC)は四捨五入、round(DOUBLE PRECISION)は銀行丸めを行います。<引用終わり>
あなたの回答
tips
プレビュー