- - PR -
ADO.NETでの数値データの扱い
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-02-02 07:41
お世話になってます。
ADO.NETについての記事はたくさんあるのですが、 下記についての情報が得られません、教えてください。 pub_id、pub_noという2つのdouble型フィールドがあり これらを使って計算するのに foreach (DataRow dr in dt.Rows) { double goukeio = dr["pub_id"] * dr["pub_no"] } などのようにとエラーがでてコンパイルが通りません。 これをキャストすると foreach (DataRow dr in dt.Rows) { double goukeio = (double)dr["pub_id"] * (double)dr["pub_no"] } のようにすると実行できるのですが pub_id 又は pub_no が0のときキャスト出来ないと言うエラーでとまります。 このような場合どのようにすれば計算が出来るのか教えてください、 よろしくお願いします。 |
|
投稿日時: 2004-02-02 09:57
「ゼロ」ですか?「ヌル(またはDbNull.Value)」ではないですか?「ヌル」はキャストできないので、先に検査しておきます。
|
|
投稿日時: 2004-02-02 18:02
Jittaさんコメントありがとうございました。
データは確認して有りましてヌルでは有りません。 ゼロでもないとすれば別の原因があるということのようです もう一度確認してみます、ありがとうございました。 |
|
投稿日時: 2004-02-03 12:47
試したところobject型をキャスト演算子でdoubleには出来ませんでした。
そのほかにもString→doubleも不可です (0だろーが、1だろーが) #VB.NETでは出来るんですけどねぇ・・・ ---------- foreach (DataRow dr in dt.Rows) { double goukeio = Convert.ToDouble(dr["pub_id"]) * Convert.ToDouble(dr["pub_no"]); } でどうでしょう。 NULL時の挙動もどこかに入れなければなりませんが。 [ メッセージ編集済み 編集者: kagura 編集日時 2004-02-03 14:08 ] |
|
投稿日時: 2004-02-04 18:25
kagura さんコメントありがとうございました。
書籍等をいろいろ探して見たりしたのですが、この辺のところが出ていないので 結局よくわからないままです。 最終的にフィールドの定義から変更して(decimal) にて行いました。 みなさんどうしているんでしょうか?? |
|
投稿日時: 2004-02-04 19:35
すみません、ちょっとお聞きしたいんですが、
>最終的にフィールドの定義から変更して(decimal) にて行いました。 というのはどういった意味でしょうか。 フィールドをdoubleからdecimalに変えたということですか? >kaguraさん >String→doubleも不可です キャストというのは、オブジェクトを別な型として参照するということです。 Stringオブジェクトはdoubleオブジェクトとして参照できませんので、もちろんキャストできません。 VB.NETのCtype()とかOption Strict Offの場合のアレとはちょっと違うんですよね。 |
|
投稿日時: 2004-02-04 19:37
基本的解決ではありませぬが、
以下の解決方法では、気分的には優れませんが 結果オーライ型で如何なもんでしょうか。 試していませんが、実際にゼロのときに エラーが発生しているとします。 あるいは掛け算の対象値の一方あるいは双方がnullの場合も含めて、 どちらにしても期待する答えは ゼロになってほしいのではないでしょうか。 (違っていたらすいません。) とすれば、 foreachの中身をtry〜catchして catch では goukeio = 0 ; としてしまえば・・・ 甘いですか???? |
|
投稿日時: 2004-02-05 05:53
引用:--------------------------------------------------------------------------------
すみません、ちょっとお聞きしたいんですが、 >最終的にフィールドの定義から変更して(decimal) にて行いました。 というのはどういった意味でしょうか。 フィールドをdoubleからdecimalに変えたということですか? -------------------------------------------------------------------------------- そうですテーブルのフィールド定義をdecimalに変えました。 |