- PR -

FLOATの値の範囲

1
投稿者投稿内容
トッティ
ベテラン
会議室デビュー日: 2008/04/01
投稿数: 64
投稿日時: 2008-09-29 11:58
 こんにちは。

初歩的な質問ですいません。

SQLServerのデータ型に
FLOATがありますが

-1.79E+308〜1.79E+308までの浮動小数点のデータを格納するデータ型
とありますが、55.5とか100.55を格納するには問題ないのでしょうか。



またE+308とはどういう意味なのでしょうか?
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-09-29 12:17
値を保証したいなら、decimal型を使ったほうが良いのでは?
トッティ
ベテラン
会議室デビュー日: 2008/04/01
投稿数: 64
投稿日時: 2008-09-29 13:11
よっしーさん、ありがとうございます。

VB2005のSqlCommandんのSqlDbTypeでdecimalを
指定したところ小数点以下が帰ってこなかったため
Floatに変えたところOKのためそうしました。

マイクロソフトのページにも
「SqlClientは、パラメータとして渡された10進値の有効性をチェックしません」
の回避策にも載っていました。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-09-29 13:53
DB は SQLServer2000 で間違いないでしょうか?

引用:

トッティさんの書き込み (2008-09-29 11:58) より:

SQLServerのデータ型に
FLOATがありますが

-1.79E+308〜1.79E+308までの浮動小数点のデータを格納するデータ型
とありますが、55.5とか100.55を格納するには問題ないのでしょうか。


そのくらいの数を格納するだけであれば、有効桁数から考えて問題ないと思います。
ここに記述されていない値や、値を計算に使った後までについては保証できません。

引用:

またE+308とはどういう意味なのでしょうか?


-1.79E+308 は、 -1.79×10^308 と同義です。

引用:

トッティさんの書き込み (2008-09-29 13:11) より:

VB2005のSqlCommandんのSqlDbTypeでdecimalを
指定したところ小数点以下が帰ってこなかったため
Floatに変えたところOKのためそうしました。


発想の順番が違うような…。
通常はDB上のテーブルのデータ型を確認して、それに対応したSqlDbTypeで受けるものだと思います。
テーブルのデータ型が float だったものを、SqlDbType.Float で受けてOKになったとすれば結果オーライですが、
仮にテーブルのデータ型がdecimalだったとして、それを SqlDbType.Float で受けてOKになったというのは何かが間違っていると思います。

引用:

マイクロソフトのページにも
「SqlClientは、パラメータとして渡された10進値の有効性をチェックしません」
の回避策にも載っていました。


こちらのことでしょうか?
これはクライアント側から値を渡すときの話であって、今回の件とは関係ないと思います。
トッティ
ベテラン
会議室デビュー日: 2008/04/01
投稿数: 64
投稿日時: 2008-09-29 15:02
rainさん、大変丁寧な回答ありがとうございます。

サイトはその通りです。

あとテーブル上はDecimalですが
SqlDbTypeでdecimalを
指定したところ小数点以下が帰ってこなかったのは事実です。

テーブルの値は1.00から99.99までの値しかありません。





nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-09-29 16:38
SqlCommandクラスにはDbTypeプロパティはないので、SqlCommandに渡すSqlParameterオブジェクトのSqlDbTypeプロパティのことを指していると思って回答します。

ScaleプロパティとかPrecisionプロパティがの設定ミスとか?
トッティ
ベテラン
会議室デビュー日: 2008/04/01
投稿数: 64
投稿日時: 2008-09-30 09:39
nakaPさん、ありがとうございます。

With cmd
.Parameters.Add("@KMK", SqlDbType.Decimal)

.Parameters("@KMK").Scale = 2
を追加したらOKでした。
.Parameters("@KMK").Direction = ParameterDirection.Output
End With

Scale は知りませんでした。

指定しない小数点以下を取れないのですね。


1

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