- - PR -
整数の1の位を切り捨てするには?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-24 12:05
いつもお世話になって下ります。
現在、VB6.0+SQLServerで開発を行っています。 int型の列のデータを整数1の位で切り捨てを行うのですが、 方法について悩んで下ります。 下記の2つの方法で、切り捨てを行うとするとどちらがいいと思いますか? 1.cast((列名 * 0.1) as int) * 10 2.cast(LEFT(列名,len(列名)-1) as varchar)+'0' 1については、小数にしてしまうと、演算誤差の心配の為、 2の方がいいのかと思いましたが、結局切り捨てるのだから 問題はないでしょうか? 皆さんの意見や、他にこの方がいいという内容がありましたら、 教えて下さい。 お願い致します。 | ||||
|
投稿日時: 2006-04-24 12:22
私は、(1) 案 + 丸めはプログラム側 (VB) で行うに 1 票。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-24 13:40
select floor ( 14.4 * 0.1 ) *10
| ||||
|
投稿日時: 2006-04-24 13:52
VB6であれば、整数演算(\)ができますので x = (a \ 10) * 10 でよいと思われます。 | ||||
|
投稿日時: 2006-04-24 14:00
select 列名 - MOD(列名, 10)
| ||||
|
投稿日時: 2006-04-24 14:10
皆さん返信ありがとうございます。
申し訳ありません。説明が足りませんでした。 変更する行が複数行(差はありますが、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 ] | ||||
|
投稿日時: 2006-04-24 15:27
SQLServer2005のヘルプでCASTを見ると
Numeric→intの場合は「切り捨て」と書いてありました。 CAST(10.563 As int) → 10 | ||||
|
投稿日時: 2006-04-24 16:15
SQLServerでは
ROUND(数値,<有効桁数>[,<実行する操作のタイプ>]) 有効桁数に負の数 実行する操作のタイプに0を指定することで 切捨ても行えるようです。 二種のうちからの選択だからスレ違いかな。。。(汗 [ メッセージ編集済み 編集者: なせ 編集日時 2006-04-24 16:21 ] |