- PR -

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

投稿者投稿内容
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 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の方がいいのかと思いましたが、結局切り捨てるのだから
問題はないでしょうか?

皆さんの意見や、他にこの方がいいという内容がありましたら、
教えて下さい。
お願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-24 12:22
私は、(1) 案 + 丸めはプログラム側 (VB) で行うに 1 票。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-04-24 13:40
select floor ( 14.4 * 0.1 ) *10
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-04-24 13:52
引用:

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

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

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


VB6であれば、整数演算(\)ができますので
x = (a \ 10) * 10
でよいと思われます。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2006-04-24 14:00
select 列名 - MOD(列名, 10)
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 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 ]
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-04-24 15:27
SQLServer2005のヘルプでCASTを見ると
Numeric→intの場合は「切り捨て」と書いてありました。
CAST(10.563 As int) → 10
なせ
常連さん
会議室デビュー日: 2006/01/06
投稿数: 41
お住まい・勤務地: おおさか
投稿日時: 2006-04-24 16:15
SQLServerでは
ROUND(数値,<有効桁数>[,<実行する操作のタイプ>])
有効桁数に負の数
実行する操作のタイプに0を指定することで
切捨ても行えるようです。

二種のうちからの選択だからスレ違いかな。。。(汗

[ メッセージ編集済み 編集者: なせ 編集日時 2006-04-24 16:21 ]

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