- ベストアンサー
テキストの形と型を変えて格納する
計測器の結果を読み込んで計算するプログラムを作っています 計測器から返ってくる計測結果は 5.12e-06 といった形で帰ってきます とりあえず帰ってきた段階ではVariant型にしているのですが 計算のために後半のe-06の部分を切り取って 前の部分だけをsingle型に格納したいのですがどういった手段があるでしょうか? ただし後半部分は場合によってe-07など形を変えてしまいます VBは5.0を使っています よろしくお願いします
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>とりあえず帰ってきた段階ではVariant型にしているのですが とありますが、出来ればStringの方が良いでしょう。 で、InStrで「e」が何文字目なのかを調べて、Left関数で 「e」の手前までの文字列を取得して、CSngでSingleに変換して Single型変数に入れてやればいいです。 敢えて完全回答は載せません。 (まぁ正確にはVB5の環境は無いんですが…) 計測器データの取得なんてプログラムを組むからには、 このぐらいは自力で調べてもらわないと。 ちなみに浮動小数点型は値によっては誤差が生じますので、 誤差が許容できない場合は使うべきでは無いです。 その場合は、CDecでVariant(内部形式Decimal)に変換して Variant型に突っ込んでください。 (VB5にVariant(Decimal)って、ありましたよね…?)
その他の回答 (4)
- redfox63
- ベストアンサー率71% (1325/1856)
5.12e-6を 5.12として扱いたいんですか? 0.00000512といった数値ではなく … 単にDouble型やSingle型へそのVariant型の変数から代入すれば 0.00000512といった数値に変換してくれますよ ただし有効桁数の関係でSingleの場合 5.12E-6といった表記になることがあります ほかの方法ですと Val関数で数値化するといったことが考えられます
- K-Sogacchi
- ベストアンサー率53% (50/93)
ANo.1です。 InStrが無いですよ? それとも元データが固定長? eより左は6文字確定なんですか? 変数「Cut」に「e」まで入ってませんか? ちなみに指数も含めた値が最終的に欲しいなら、eの後の文字も取得して それを元に10の何乗か してください。 あと細かいツッコミですが… 変数名 MyDate だと パッと見た感じ日付データですよ。
お礼
ただいま問題解決しました どうもこの計測器は「計測結果を送れ」という命令に対して "1.23456"という数字部分と、"e-6"という桁表記を別々に出力していたようです そのため、前の数字部分はそのまま受けいれられても桁表記は受け入れられなかったようです 対策として、出力内容をチェックしてから変数に格納するか 奇数回目の出力だけを変数に格納するようにしようと思います 皆さんありがとうございました
補足
小数点以下6桁あってからe-6,e-7は確定なのでInStrは不要と判断しました 確かに日付ですねw 参考にした本から引っ張ってきたままでした
元のデータの実型は何でしょうか? Double? Single? (Variantの変数をウォッチウィンドウで見れば判ります。) e-06 が基準になるなら、単に元のデータを 1000000 倍すれば良いのではないでしょうか?(元のデータが文字型なら変換してから計算) Dim s As Single s = CSng(Buffer) * 1000000
補足
stringになってます
- sakusaker7
- ベストアンサー率62% (800/1280)
eのあとの数字が -06 だったり -07だったりするのなら eの前の数字だけ取り出して云々というのはとても怖いのですが大丈夫なんですか? 一桁違いますよ?
補足
計算というのが、グラフの作成なので問題ないです また、e以降も残したままのデータも別に残してあるので大丈夫です 目的として、実験中にひと目で状態がわかるように おおよそのグラフが欲しいわけです ですので誤差が出る可能性があるsingleでも概略をつかむだけなので十分です
補足
stringは忘れていました修正しておきます left関数や、CSngやVal関数も以下のように試してみました Dim MyDate(1 To 100, 1 To 1) As Single Dim Cut As String Cut = Left(Buffer, 6) MyDate(1, 1) = CSng(Cut) ちなみにBufferが計測器からの情報で、最後の行で型が一致しないといわれます