質問 |
||
| 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 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |