• ベストアンサー

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

専門家に質問してみよう