- - PR -
FLOATの値の範囲
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-29 11:58
こんにちは。
初歩的な質問ですいません。 SQLServerのデータ型に FLOATがありますが -1.79E+308〜1.79E+308までの浮動小数点のデータを格納するデータ型 とありますが、55.5とか100.55を格納するには問題ないのでしょうか。 またE+308とはどういう意味なのでしょうか? | ||||||||||||||||
|
投稿日時: 2008-09-29 12:17
値を保証したいなら、decimal型を使ったほうが良いのでは?
| ||||||||||||||||
|
投稿日時: 2008-09-29 13:11
よっしーさん、ありがとうございます。
VB2005のSqlCommandんのSqlDbTypeでdecimalを 指定したところ小数点以下が帰ってこなかったため Floatに変えたところOKのためそうしました。 マイクロソフトのページにも 「SqlClientは、パラメータとして渡された10進値の有効性をチェックしません」 の回避策にも載っていました。 | ||||||||||||||||
|
投稿日時: 2008-09-29 13:53
DB は SQLServer2000 で間違いないでしょうか?
そのくらいの数を格納するだけであれば、有効桁数から考えて問題ないと思います。 ここに記述されていない値や、値を計算に使った後までについては保証できません。
-1.79E+308 は、 -1.79×10^308 と同義です。
発想の順番が違うような…。 通常はDB上のテーブルのデータ型を確認して、それに対応したSqlDbTypeで受けるものだと思います。 テーブルのデータ型が float だったものを、SqlDbType.Float で受けてOKになったとすれば結果オーライですが、 仮にテーブルのデータ型がdecimalだったとして、それを SqlDbType.Float で受けてOKになったというのは何かが間違っていると思います。
こちらのことでしょうか? これはクライアント側から値を渡すときの話であって、今回の件とは関係ないと思います。 | ||||||||||||||||
|
投稿日時: 2008-09-29 15:02
rainさん、大変丁寧な回答ありがとうございます。
サイトはその通りです。 あとテーブル上はDecimalですが SqlDbTypeでdecimalを 指定したところ小数点以下が帰ってこなかったのは事実です。 テーブルの値は1.00から99.99までの値しかありません。 | ||||||||||||||||
|
投稿日時: 2008-09-29 16:38
SqlCommandクラスにはDbTypeプロパティはないので、SqlCommandに渡すSqlParameterオブジェクトのSqlDbTypeプロパティのことを指していると思って回答します。
ScaleプロパティとかPrecisionプロパティがの設定ミスとか? | ||||||||||||||||
|
投稿日時: 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