ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3369073 SQLで小数点の計算がしたいです。
質問者:mihck postgresql8.2.4を使っています。

select to_char(10/3, '99D999');
とすると、
3.000となります。

10/3=3.3333....ではないのでしょうか?

他のSQL(MySQLやSQLServer,Oracle,DB2)もどう記述するか知りたいです。
困り度:
  • 困っています
質問投稿日時:
07/09/23 10:19
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.1 10や3という数値定数を指定すると、データ型がint(整数)と仮定されます。そして10/3も演算の中間結果もint同士の演算なので、データ型はintになるため、ここで小数点以下が切り捨てられます。
これを防止するには、10や3を10.000や3.000のように、データ型にdecが仮定され、小数点以下を保持できるようにします。小数点以下の精度をどのくらい保証できるようにしたいかにより、10.0や10.000あるいは、10.00000のように指定します。

今回のケースでは、
select to_char(10.000/3.000, '99D999');
のように指定すれば、期待した結果を得られます。

他のRDBMSでも細かくは確認していませんが、同じようなことが言えます。またSQLに限らず、プログラミング言語でも演算の中間結果がどういうデータ型になるか注意しないと、演算精度がまったく違うものになります。
回答者:chukenkenkou
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/09/23 16:15
この回答へのお礼この回答にお礼をつける(質問者のみ)