質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

0回答

824閲覧

PostgreSQLでストアドファンクション内の掛け算を正しく実行したい

Fur0

総合スコア48

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/11/16 15:01

実現したいこと

整数と少数の掛け算を正しく計算したいです。

発生している問題

以下のクエリをストアドファンクション内で実行したとき、想定した結果と異なる結果が戻ってくる場合があります。

-- 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/11/17 00:13

> value = 「0.05」の場合、「5」になりNG。 どうなることを想定していたのですか?
Fur0

2021/11/18 22:38

すみません、こちらは「NG」ではなく「OK」が正しいです。 引き続き、よろしくお願いします。
maisumakun

2021/11/18 22:48

> value = 「0.0005」の場合、「0」になりNG。 これもどう出ることを想定していたのかがわかりません。
退会済みユーザー

退会済みユーザー

2021/11/22 06:40

この記事をご確認ください: PostgreSQLのround()の話 - Qiita https://qiita.com/fujii_masao/items/c79575fb57827f658063 <引用>PostgreSQLでは、引数のデータ型によりround()の挙動が異なり、round(NUMERIC)は四捨五入、round(DOUBLE PRECISION)は銀行丸めを行います。<引用終わり>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問