• ベストアンサー

VBScriptでの整数型価格データの比較演算

 VBScriptで簡単な価格比較のプログラムを作りました。文字型で価格データが格納されていて、その価格の大小を比較するものです。私は下記のように書きましたが、どうも正しく演算されていない場合があるようです。 if CDbl (Price1) < CDbl (Price2) then  比較の内容は日本円なので整数です。上記の演算がもしも適切でない場合はどのようにすれば適切かをお教え頂ければ幸いです。適切である、というご回答でも構いません。  よろしくお願いします。

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

  • ベストアンサー
  • NNori
  • ベストアンサー率22% (377/1669)
回答No.2

VBScriptは型宣言ができないのでそういうことが頻繁におきます。まず「文字型で価格データが格納されていて」ここが怪しい。場合によってわからないのです。そこで簡単に無理やり整数にしちゃいます。 例えば Pri1 = Price1 - 0 Pri2 = Price2 - 0 if Pri1 < Pri2 then または if ( Price2 - Price1 ) > 0 then ポイントは -マイナス演算子は 文字型には定義されていないので無理やり数字に変換されるので動作します。

norakini
質問者

お礼

へぇーーーという感じでした。とても参考になりました。皆様のおかげで一応スクリプトは本稼動しています。ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3 です。 #3の補足をします。 Price1 < Price2 で文字型の比較をすれば、数字の文字の大きいほうになるけれども、演算をすれば、数値型になりますね。 例: "140" < "20" は "20" が大きいですが、 #2 さんのご指摘のように、 "140" -"20" とすれば、数値型にキャストされて、120になりますね。 ただし、数値型にならないものは、#3のように排除しなければならないです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

if CDbl (Price1) < CDbl (Price2) then 特に、ここの変数型の問題ではなくて、その元のPrice1 とPrice2 の値がどうなっているかです。 ちょっとサンプルコードを考えてみました。ご覧になっていただけますでしょうか? Price1 =145 Price2 =200 は、 Price1 ="145" Price2 ="200" でも可能です。 しかし、 Price1 =145 Price2 =a200 は、Price1 は、145 のままで扱われますが、Price2 は、0 となります。 そのまま演算に入れてしまうと、計算はしますが、片方が、0 となっていますので、狂いが生じてしまいます。そこで、それを防止するために、以下のようなモデルを作りました。 'Test数値比較 Price1 =145 Price2 =20 If Not (IsNumeric(CStr(Price1)) and IsNumeric(CStr(Price2))) Then MsgBox "比較できません" Wscript.quit End if cmp = Price1 - Price2 Select Case Sgn(cmp) Case 1 MsgBox Price1 & "が大きい" Case -1 MsgBox Price2 & " が大きい" Case 0 MsgBox Price1 & " と " & Price2 & " は等しい" End Select 後、特別なケースがない限りは、変数型の変換は必要ないと思います。また、もちろん、実際に、比較できる限りは、Sgn関数やCase を使う必要はありません。

norakini
質問者

お礼

詳細なご説明をありがとうございました。とても参考になりました。

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.1

こんにちわ。 比較部分は特に問題ないようにも見えますが…。 Price1とPrice2の値の中身を自分の目で確かめてみてはどうでしょう? 正しく演算されないときのパターンがあるなら途中で 数値が変わってしまう仕組みになっているかもしれません。 ちなみに整数であるのなら、CDblよりもCLngのほうが良いかもです。(あんまかわんないかな…?)

norakini
質問者

お礼

ご回答ありがとうございました。結局はVBの変数の仕組みに振り回されてしまったということでした。ありがとうございました。