- PR -

小数点1桁まで表示したいのですが。

1
投稿者投稿内容
みい
会議室デビュー日: 2006/06/15
投稿数: 2
投稿日時: 2006-06-15 15:14
こんにちは。
初歩的な質問ですみません。
SQLで粗利益率を出そうとしています。
以下のように計算したあと、
ROUND(((売上 - (作業費 + 外注費 + 経費)) * 1000 / 売上),0)
10で割って、小数点1桁まで表示したいと思っています。
452
410
332
のような結果を、
45.2
41.0
33.2
のような表示になるようにしたいのです。(常に小数点1桁まで表示)
ですが、これを10で割ると、
45
41
33
のようになってしまいます。
どのようにしたらよいのでしょうか。
お願いします。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-06-15 15:24
引用:

みいさんの書き込み (2006-06-15 15:14) より:

以下のように計算したあと、
ROUND(((売上 - (作業費 + 外注費 + 経費)) * 1000 / 売上),0)
10で割って、小数点1桁まで表示したいと思っています。
452
410
332
のような結果を、
45.2
41.0
33.2
のような表示になるようにしたいのです。(常に小数点1桁まで表示)
ですが、これを10で割ると、
45
41
33
のようになってしまいます。
どのようにしたらよいのでしょうか。



to_char() 関数のフォーマット指定で対応できるかとは思いますが。

select to_char(deptno, 'FM00.0') from dept;

ただ、RDBMS とか接続に使用したアプリケーションが不明なので
何とも言えませんが、取ってきたデータを他の処理で使い回すので
あれば、むやみにデータ型を変更するような方法よりも
アプリケーションで表示するときに変更した方がよいかも。

以下追記:
後でよく見たら、round(...,0) してるのに 33.2 は出しようが
ないですね。小数点以下を丸めてるんですから。

_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2006-06-15 15:27 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2006-06-15 15:25
 ROUNDを使ってますから、当然のごとく、小数点は飛びますね・・・。
小数点第一まで表示するだけで良いなら、
ROUNDに引き渡す値を10倍にして、ROUNDの結果を10で割るだけですね。
これ、DBの問題というよりもアルゴリズムの問題ですね。

あと、ROUNDですが、DBにより意味合いが多少違うかもしれませんので、
RDBMSの名前ぐらい書くべきですね。
むら
会議室デビュー日: 2006/04/11
投稿数: 11
お住まい・勤務地: さっぽろ
投稿日時: 2006-06-15 15:28
こんにちは。
RDBMSは何を使っているのかわかりませんが、

SQL Serverだと・・
以下のような感じでキャストすればイケルかと思います。
--------------------------------------------------------------
SELECT
Cast(ROUND(452/10,0) AS Decimal(5,1)) AS 粗利益率
みい
会議室デビュー日: 2006/06/15
投稿数: 2
投稿日時: 2006-06-15 15:37
ありがとうございます。
すみません。
データベースの種類を記入していませんでした。
SQLServer 2005 です。
1

スキルアップ/キャリアアップ(JOB@IT)