• ベストアンサー

VB2008による数値の比較

円周率暗記練習のプログラミングをVB2008で行なっています。 文字列であればLike演算子で前方一致を真とすることができるのでしょうが 数値の場合は簡単にはいかないのですか? 要は3.14や3.1415のように途中まで合っていれば真としたいのです。 自分なりに考えたのですが次のような方法があるのかなと思います。 普通に配列を利用する。 数値を文字列に変換してLike演算子を使う? VB2008で利用できる機能がある? 初心者なので数値と文字列の明確な違いも良く分かっていません。 配列を利用するのは面倒そうなので簡単な方法を知りたいのです。 よろしくお願いします。

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

  • ベストアンサー
  • maesen
  • ベストアンサー率81% (646/790)
回答No.6

>円周率のデータとしては既存の10000桁を >プログラム上に直に置こうかと思っています。 10000桁をハードコーディングするのなら数値型変数には代入出来ないため、文字列で持つしかないので 現実的にはLikeを使用することになりそうに思います。 わざわざ配列にすることもないでしょうから。 >皆様から多数御回答いただきましたが、文字列のLike演算子の >ようなものは無いというのが結論でしょうか。 おそらく無いと思いますが、有っても円周率10000桁を数値化して数値型変数に格納できませんから使えませんよね。

arinko2
質問者

お礼

再度の御回答ありがとうございます。 >10000桁をハードコーディングするのなら数値型変数には代入出来ない とても参考になりました。 今まで御回答いただいた皆様全員の方に有用な情報をいただき 本当にありがとうございました。 私にとってはどれも貴重な回答でした。 最後までお付き合いいただきましたのでベストアンサーとさせていただきます。 完成に向けて頑張ります!!

その他の回答 (5)

  • maesen
  • ベストアンサー率81% (646/790)
回答No.5

>円周率暗記練習のプログラミングをVB2008で行なっています。 単純な数値の比較からは外れてしまいますが、 円周率はMAX何桁ぐらいを考えていますでしょうか。 数値変数を使用する場合Double型にしても有効桁数はそれほど多くないので実質数値での比較は無意味のように思えるのですが違いますでしょうか。 私が小中学生ぐらいのときに覚えたものでもDouble型には入りません。 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx 多数桁の円周率を計算で求めるならば、結果は配列に格納すると思いますのでこの場合は配列。 ハードコーディングで1000桁ぐらいを持つのならば、文字列といった感じになるのかなと思います。

arinko2
質問者

お礼

御回答ありがとうございます。 円周率のデータとしては既存の10000桁を プログラム上に直に置こうかと思っています。 皆様から多数御回答いただきましたが、文字列のLike演算子の ようなものは無いというのが結論でしょうか。 残念です。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

Roundには一応丸め方を制御する引数付きのものもあります、というか最初にこっちを出しとくべきでした。 http://msdn.microsoft.com/ja-jp/library/f5898377(v=VS.90).aspx もっとも切り上げがどうしても含まれるので3.1415⇒3.1412となってしまうと3.141が正解にならないとか言うことがあってRound自体が質問自体に不適切でした。 なお「対象桁数不定」の状態で確実にやるにはToString()で文字列化してLikeしか手はないと思います。

arinko2
質問者

お礼

再度の御回答ありがとうございます。 >なお「対象桁数不定」の状態で確実にやるにはToString()で文字列化してLikeしか手はないと思います。 そうですか。実は文字列化もこれからなので、頑張ってみます。 本当にありがとうございます。

  • osietete4
  • ベストアンサー率21% (81/369)
回答No.3

roundは危険ですよ。 「丸める」=「適当に切り捨てたり、切り上げたりしちゃう」なので。 ※プログラミング言語は英語圏の人が作ったものなので、日本人(日本語)の感覚だと「なんじゃこれ?」って感じちゃう関数が時々あります。 以下はRoundの説明文から抜粋したものです。   digits の桁位置よりも右側にある d の桁にある値が digits の桁位置の値の中間である場合、   この値が奇数の場合は切り上げられますが、偶数の場合は変更されません。   d の精度が digits より小さい場合は、d は変更されずに返されます。

arinko2
質問者

お礼

再度の御回答ありがとうございます。 納得です。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

Roundで丸めて比較するのが王道な気がします。 http://msdn.microsoft.com/ja-jp/library/75ks3aby(v=VS.90).aspx

arinko2
質問者

お礼

御回答ありがとうございます。 王道ですか。 初心者ゆえに想像もつきませんでした。 実行速度は考慮していないのでもっと簡単な 方法があればと思ってました。

  • osietete4
  • ベストアンサー率21% (81/369)
回答No.1

 >数値を文字列に変換してLike演算子を使う? というやり方でもOK。 Int関数を使って「小数点以下4桁までを取り出してから、比較する」というやり方でもOK。 http://adonetvb.com/Leaning/IntFunction.html Int関数を使った小数点以下切捨てのアルゴリズムは以下のとおり iPiyo=Int(dHoge * 10000) dHoge=iPiyo/10000

arinko2
質問者

お礼

早速の御回答ありがとうございます。 Int関数というのも利用できるのですね。 やはり数値そのものをLike演算子のように一発では処理できないのですか。 自作関数で出来るという事は無いのでしょうか。 Int関数について調べてみます。 でも数値の前方一致とか、あると便利ですよね。 今後もよろしくお願いします。

関連するQ&A

  • C#で文字列から数値だけ取得する方法

    C#で文字列から数値だけ取得する方法 stringの文字列をcharの文字配列に入れなおして 数値の場合だけ、別の配列(例:a[3])にコピーする。 そんな方法で数値を抜き出そうかと思っています ですが、文字列から数値だけを見つけ出して取得する方法がわかりません。 詳しくのっているサイトなどありましたら 教えてください…!!

  • 数値の扱いについて

    再びお世話になります。 VB.NETでプログラムを組んでいるのですが、 お聞きしたいことがありまして書かせていただきます。 Singleで型をとったA、Bを演算し、表示させたところ NANという文字が出てきました。 このNANを0(数値として)で表現したいのですがどうすればよろしいのでしょうか?NANと出てきた数値は後での演算で使いたいので、どうにかしたいです。

  • VB6.0で連想配列は可能?

    VB6.0で、perlの連想配列のように、配列の添字として文字列を使うことは可能でしょうか?

  • VB2005 文字型(String)について

    VB6 では文字型でも配列(Global Itemdata(0 To 100) As String)にできていたのですが、VB2005では、文字型は配列にできないのでしょうか?どなたか文字型を配列にする方法を知っていれば教えて頂きたいのですが。よろしくお願いします。

  • リセットする際に配列に格納されている数値を空の状態にしたいのですが・・・

    宜しくお願い致します。 VB2005でプログラミングをしています。 リセット(コマンドボタンをクリック)する際に配列に格納されている数値を空の状態にしたいのですが・・・プログラミング素人の頭をフル回転させていろいろな方法を試してみたのですが、できませんでしたのでどなたかアドバイスをお願い致します。

  • カンマの含まれる文字列の数値変換方法について

    VB.NETでプログラミングしています。 String型の文字列を Double型の数値に変換するときに 一般的にはVal関数を使いますが、 カンマが含まれる文字列"111,111"を 数値変換したい場合には単純にVal関数を 使用しただけではうまくいかないようです。 上の例で数値変換すると"111"になってしまうようです。 そこで質問なのですが、 何か簡単にできるうまい方法はないでしょうか? 関数があればご教示ください。 以下、Val関数の説明の抜粋です。 解説 文字列中に数字以外の文字が見つかると、Val 関数は読み込みを中止します。円記号 (\) やカンマ (,) など、通常は数値の一部と見なされる記号や文字も、Val 関数は数値として解釈しません。

  • 文字列入力したものを数値に変換したい

    excel2007です。 数値を文字列で入力したものを 通常の数値に変換するには どうすれば宜しいのですか。 四則演算ができるようにしたいのですが。

  • これ以上省略することは出来ないですか?

    IF文をvbaで記載しているのですが もっと省略できないか?と思っています。 配列は0から14まで格納済みです。 下記のコードは正常に動きます。(一部のみの記載ですが) 置換 = _ IIf(文字列 Like "*" & A配列(0) & "*", "" & B配列(0) & "", _ IIf(文字列 Like "*" & A配列(1) & "*", "" & B配列(1) & "", _ IIf(文字列 Like "*" & A配列(2) & "*", "" & B配列(3) & "", _ IIf(文字列 Like "*" & A配列(3) & "*", "" & B配列(3) & "", _ IIf(文字列 Like "*" & A配列(4) & "*", "" & B配列(4) & "", _ IIf(文字列 Like "*" & A配列(5) & "*", "" & B配列(5) & "", _ IIf(文字列 Like "*" & A配列(6) & "*", "" & B配列(6) & "", _ IIf(文字列 Like "*" & A配列(7) & "*", "" & B配列(7) & "", _ IIf(文字列 Like "*" & A配列(8) & "*", "" & B配列(8) & "", _ IIf(文字列 Like "*" & A配列(9) & "*", "" & B配列(9) & "", _ IIf(文字列 Like "*" & A配列(10) & "*", "" & B配列(10) & "", _ IIf(文字列 Like "*" & A配列(11) & "*", "" & B配列(11) & "", _ IIf(文字列 Like "*" & A配列(12) & "*", "" & B配列(12) & "", _ IIf(文字列 Like "*" & A配列(13) & "*", "" & B配列(13) & "", _ IIf(文字列 Like "*" & A配列(14) & "*", "" & B配列(14) & "", _ ""))))))))))))))) 規則としては配列(i)を1つづつ増やすだけなので どうにか省略できないでしょうか? (withステートメントみたいに) よろしくお願いします。

  • 文字列比較の演算子

    Perl の世界から PHP にやってまいりました。 Perl では、文字列の比較には専用の演算子がありまして、 str1 eq str2 とすると、二つの文字列が同値かどうか調べられますが、PHP にはこのような演算子はないのでしょうか? www.php.net のマニュアルを見ても、そのような演算子がありません。 == 演算子が使えるものかと <?php $str1 = "this is string" ; $str2 = "this is string" if( $str1 == $str2 ) { echo "two string is same" ; } ?> などを試してみるとうまくいくようですが、www.php.net のマニュアルには「文字列を数値化して比較する」と書いてあり、本当に文字列比較が出来るか確信がもてず…。 結局、文字列を比較したいときには strcmp を呼び出していますが、これは PHP 的には正しいのでしょうか?

    • ベストアンサー
    • PHP
  • C#で数値を抽出したい

    0,2,3,3,5,6, という文字列があったとしまして、これを左の数値からint型配列にひとつひとつ格納したいのですが、どうやればいいかわかりません。 int[0]=0 int[1]=2 ... int[5]=6 どなたか教えてください!

専門家に質問してみよう