QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

整数の1の位を切り捨てするには?

いつもお世話になって下ります。

現在、VB6.0+SQLServerで開発を行っています。

int型の列のデータを整数1の位で切り捨てを行うのですが、
方法について悩んで下ります。

下記の2つの方法で、切り捨てを行うとするとどちらがいいと思いますか?

1.cast((列名 * 0.1) as int) * 10

2.cast(LEFT(列名,len(列名)-1) as varchar)+'0'

1については、小数にしてしまうと、演算誤差の心配の為、
2の方がいいのかと思いましたが、結局切り捨てるのだから
問題はないでしょうか?

皆さんの意見や、他にこの方がいいという内容がありましたら、
教えて下さい。
お願い致します。

質問者:ケイ

回答

私は、(1) 案 + 丸めはプログラム側 (VB) で行うに 1 票。

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

select floor ( 14.4 * 0.1 ) *10

投稿者:めだか

編集 履歴 (0)

現在、VB6.0+SQLServerで開発を行っています。

int型の列のデータを整数1の位で切り捨てを行うのですが、

1については、小数にしてしまうと、演算誤差の心配の為、

VB6であれば、整数演算()ができますので
x = (a \ 10) * 10
でよいと思われます。

投稿者:まどか

編集 履歴 (0)

select 列名 - MOD(列名, 10)

投稿者:ゆうじゅん

編集 履歴 (0)

皆さん返信ありがとうございます。

申し訳ありません。説明が足りませんでした。

変更する行が複数行(差はありますが、5万件更新する場合も)
ある為、SQLで更新しようと思っています。

まどかさんのVb6からというのは、
「¥」を使用した割り算(小数部切り捨て) 「a ¥ b = int (a / b)」
※エンマークが変換されてしまったので、全角にしました。

という事ですよね?

SQL文にすると下記になるはずですが・・・
cast((列名 / 10) as int) * 10

自分の1番(cast((列名 * 0.1) as int) * 10)よりは、
こちらの方がよさそうですかね?

[ メッセージ編集済み 編集者: ケイ 編集日時 2006-04-24 14:13 ]

投稿者:ケイ

編集 履歴 (0)

SQLServer2005のヘルプでCASTを見ると
Numeric→intの場合は「切り捨て」と書いてありました。
CAST(10.563 As int) → 10

投稿者:まどか

編集 履歴 (0)

SQLServerでは
ROUND(数値,<有効桁数>[,<実行する操作のタイプ>])
有効桁数に負の数
実行する操作のタイプに0を指定することで
切捨ても行えるようです。

二種のうちからの選択だからスレ違いかな。。。(汗
[ メッセージ編集済み 編集者: なせ 編集日時 2006-04-24 16:21 ]

投稿者:なせ

編集 履歴 (0)

なせさんの書き込み (2006-04-24 16:15) より:

SQLServerでは

ROUND(数値,<有効桁数>[,<実行する操作のタイプ>])

有効桁数に負の数

実行する操作のタイプに0を指定することで

切捨ても行えるようです。

ありがとうございます。
試してみました。

私のように、整数の1の位を切り捨てするには、
round(列名,-1,1)

で設定するようですね。
実行する操作のタイプが0だと、丸められてしまったので。

関数での方が分かりやすいかもしれませんね。
Roundを使用して、切り捨てを行ってみようと思います。

皆さんありがとうございました。

投稿者:ケイ

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。