dポイントプレゼントキャンペーン実施中!

postgresql8.2.4を使っています。

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

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

他のSQL(MySQLやSQLServer,Oracle,DB2)もどう記述するか知りたいです。

A 回答 (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に限らず、プログラミング言語でも演算の中間結果がどういうデータ型になるか注意しないと、演算精度がまったく違うものになります。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!