• ベストアンサー

oleDBでnumeric形式の小数部分の取得は?

DBにはpostgresを使用していて、numeric(8,2)の様に定義した項目から VB.netのプログラムでOleDbDataReaderを使用して値を読み取るのですが .GetValueでは123.45 -> 123 という風に整数部分しか読み取れません。 試しに .GetValue(x).Tostringで出力してみたのですが、やはり小数部分が見あたりません。 直接コマンドで見る限り、テーブルには正しく小数以下も格納されています。 現在は、クエリで 100倍して.GetValueで読み込んだ後に100で割っていますが 直接読み込むメソッドがありましたらご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

.NETについては分かりませんが、SQL中で演算する必要がないなら、SQL中で文字に型変換してしまって、文字で受け取るといった方法もあります。 select c1,c2 from t1 [where ・・・] といったselect文で、例えばc2列がnumeric(8,2)であるなら、 select c1,to_char(c2,'S999999.99') as c2 from t1 [where ・・・]

参考URL:
http://www.postgresql.jp/document/8.3/html/functions-formatting.html
thankyou88
質問者

お礼

文字→数値変換の手間やクエリの煩雑化を避けたかったのですが こちらの方法は動作を確認できましたのでベストアンサーとさせていただきます。 有り難うございました。 それからお礼が大変遅くなりましたことお詫びします。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

OleDbDataReader.GetDecimal メソッドを使ったらどうなりますか。 http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbdatareader.getdecimal%28v=vs.71%29.aspx

thankyou88
質問者

お礼

折角、ご回答頂いたのにお返事が遅れてすみません。 ご意見を参考に色々と試してみました。 わかったことは、numericとdecimalは同じ扱いらしいのですが、numericで宣言した物を decimalで読み込もうとするとエラーになりました。 改めて、decimalで定義を行って、型エラーというメッセージはでなくなったのですが、結局は整数として小数部分がうまくとれませんでした。 (私が何か根本的な勘違いをしているだけなのかも知れませんが) アドバイスに感謝します。

関連するQ&A

  • OleDbDataReaderで単精度浮動小数点項目の取得について

    VB.netと(Access OfficeXP版)MDBでプログラミングしています。 DBアタッチは、OleDb関連でやっています。 今、データベース内の単精度浮動小数点の項目(小数点以下2桁設定)が正確に取得できず悩んでいます。 String型の項目は取得できます。 Dim Myreader as OleDbDataReader While Myreader.Read System.console.WriteLine(MyReader.GetString(0)) System.console.WriteLine(MyReader.GetFloat(1)) End while これを行うと以下の実行エラーが出ます。 "符号の不一致またはデータオーバーフロー以外の理由により、データ値が変換できませんでした。" MyReader.GetFloatのところは、GetDoubleでも同様です。またGetValueにすると異常終了はしませんが、 数値はzeroが入ってきます。 よろしくお願いいたします。

  • Accessエクスポートで不要の小数点以下が出る

    クエリをテキストエクスポート設定をしたのですが、数字フィールド(整数)のエクスポート結果が、小数点第2位まで付いてしまいます。クエリのプロパティで書式に0を設定したり、テーブルに変換して実行しても結果は同じです。 OSは、Windows7、Accessは2013です。 例 1,○○ 2,○○    とクエリではなっていますが、csvにエクスポートすると、 1.00,○○ 2.00,○○   というように、小数点以下が不要です。 テキストエクスポート定義には、小数点を設定する項目がなく、他の方法でできないものか悩んでいます。 小数点以下を書き出さない方法をご存知でしたら教えてください。

  • 実数の整数部,小数部の取得

    OS:windows2000pro VB:VB6.0sp5 実数 num(変数) [as currency]  (但し 小数点以下2位まで)の値の 1.整数部 num_int(変数) [as long] 2.小数部 num_dec(変数) [as long] を上記変数に格納するのは、どのようにすればいいのでしょうか? (例1)num = 123.02 の場合、num_int=123, num_dec=2 (例2)num = 4.20 の場合、num_int= 4, num_dec=20 (例3)num = 0.23 の場合、num_int= 0, num_dec=23  よろしくお願いいたします

  • 小数点以下の検知

    とつぜん失礼します。VB.Netを使用しています。 計算結果が小数点以下 たとえば"25.6"だった場合10倍して整数化する プログラムを書きたいのですが、調べてもわかりません。 すみませんが誰かお教えください。

  • 入力値が小数なら、整数部・小数部の桁チェックをしたい。

    VB2005環境です。 テキストボックスに数値が入力された時、整数部分が4桁以上か、 小数部分が2桁以上になっている場合、警告メッセージを出したいと 考えています。 具体的には、 0.1→OK 99.9→OK 100.1→OK 0.01→NG 1001.9→NG 0.99→NG 1111→NG テキストボックスは数字以外の入力も許可しており、数字を 入力した場合だけのチェックです。 まずIsNumericで数値判定を行っているのですが、その後、上述の 小数桁チェックをどうしたら良いか悩んでいます。 また、99を入力した場合は99.0、09.1と入力した場合には9.1と、 整数部は一番左側に0があれば消し、小数部は未入力ならば".0"を 追加できたらと思っているのですが、うまくいきません。 実現するために必要な処理は、 ・入力値が数値か ・数値であれば、整数か、小数か ・整数部の桁チェック ・小数部の桁チェック(小数時) ・整数であれば、999.9の形になるよう変換 といったところかなと思うんですが、まず小数チェックで 躓いています。 参考にロジックを交えて教えていただけないでしょうか。 宜しくお願いします。

  • 文字列変換の際に小数部の桁数を調整したい

    Visual Basic 2005で開発を行っています。 整数部や小数部の桁数チェックの為、Decimal型を一度String型へ変換し、 その後チェックを行っています。 しかし、「1.000」などという値でチェックが行われた時、ToString()した 時点でString型変数へ格納される値が「1.000」のままなので、チェックで 弾かれてしまいます。 「1.000」がチェック対象となった時、チェックする値は「1」となって欲しく、 「1.001」がチェック対象となった時は「1.001」のままであって欲しいです。 整数部も小数部も何桁来るかは分かりません。 (Decimalで収まる桁数であることは間違いありません) 先のように不要な小数部について除去されるような命令やフォーマット指定が 分からず悩んでいます。 どなたかご教示下さい。

  • ビットマップ画像の座標を小数で扱う方法について。

    ビットマップ画像の座標を小数で扱う方法について。 プログラムでビットマップ画像を扱っています。 現在、ビットマップ画像のRGBの値を2次元配列に格納しています。 そのため、例えば画像の白い部分の座標がどこかを知りたいときは、2次元配列の場所を辿り、整数値として座標を得ています。 これを整数値ではなく、少数値で扱うことは可能でしょうか? 配列で扱う以外に方法が思いつかないです;; よろしくお願いします。

  • 経度緯度のDBカラムの桁数

    度表示に変換した経度・緯度(日本限定の位置情報)をDBに格納しようと思っています。 DECIMAL型かな?と思っているのですが、桁数はどれくらい設定すれば良いのでしょうか? 整数部分は0~360までなので3桁で問題ないと思うのですが、小数点以下は何ケタにすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • エクセル セルの表示形式のユーザー定義について

    セルの表示形式で、ユーザー定義に使用できる記号について説明しているページです。 http://support.microsoft.com/kb/883199/ja#top こちらのページの「数値の書式記号」の説明部分で質問します。 この「数値の書式記号」で、エクセルの画像を使用して説明がされています。 下のほうに「桁を揃えて表示」とあります。 ばらばらの小数点以下の見栄えを揃えることができるのがわかりました。 が、ここで更に「整数」も入力したい思っています。 この「ユーザー定義」のままだと「1234.」と、小数”点”が、余計にくっついてきます。 「1234」と表示したいです。 なにか条件をつけるのか? それともユーザー定義ではできないのか? ご存知の方がいらっしゃいましたら、お教えください。

  • DataSetから、DataTableを取得したい。

    C♯環境です。 DataSetに格納されている1つのテーブルを、DataTableとして 取得したいと思っています。 VB.NETではたしか出来たと思うのですが… DataTable Dt= DataSet.Tables(0); 以上のように書くと、「~Tablesはプロパティですがメソッドのように 使用されています」と怒られます。 出来ないのでしょうか…? 誤りをご指摘いただけるとありがたいです。 宜しくお願いします。