- PR -

VBScriptで数値型に自動変換時にオーバーフローエラー

1
投稿者投稿内容
やまやま
会議室デビュー日: 2009/02/03
投稿数: 2
投稿日時: 2009-02-03 14:46
Win2003ServerR2で、VBScriptでカスタマイズできる印刷アプリを使っています。
そのVBScriptで、

1: inVar = "000350" '数字のみを含む文字列、可変、10桁以下
2: If isNumeric(inVar) Then
3: inVar = inVar * 1
4: End If

といったコードを実行した場合に、通常まず問題無いのですが、
稀にアプリが変わった挙動になってしまうらしく、
3: の行で"オーバーフローしました。"というエラーが出て、
スクリプトの実行が終わってしまうことがあります。
いったんこうなると、他の同様のコードを利用している部分も
同様のエラーがでるようになります。
呼び出し元の印刷アプリを再起動すると回復し、それ以降
全く同じ入力で同様なコードを多数呼び出しても
エラーにはなりません。

3: inVar = inVar * 1
の行で変数 inVarの内部表現が 動的に数値型へ変換されるものと考えるのですが、
この変換の挙動が何かの拍子で変わってしまい、
適切に変換されなくなることはあるのでしょうか?

Scripting Host のバージョンは 5.6.0.8835 です。

かなり限定された情報ですみません。
心当たりのある方、ご教授ください。

同様の現象に遭ったことがある方もお願いします。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-03 20:12
参考になるかどうかはわかりませんが、
10桁ですと、Longに変換された場合はオーバーフローする場合がありますね。
Longで扱えない値の場合doubleになると思いますが、Longを要求する処理が後続にあるとそこで落ちるかもしれません

コード:
inVar = "9999999999"

If isNumeric(inVar) Then

inVar = inVar * 1
hexVar = Hex(inVar)

End If



ただ
引用:

3: の行で"オーバーフローしました。"というエラーが出て、


とおっしゃってますので関係なさそうですが。


mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2009-02-03 20:27
全然試してないんですが。

0 + inVar

でも同じなんでしょうか?
やまやま
会議室デビュー日: 2009/02/03
投稿数: 2
投稿日時: 2009-02-04 10:06
デューン様 ありがとうございます。
いったんオーバーフローエラーが出る状態になると、入力の数値が3桁の場合でも
オーバーフローが起きるのですが、どんなきっかけでこの状態に陥るのかが
わかりません。
ただ、inVar=CCur(inVar) のように明示的にオーバーフローしにくい型に
変換することで回避できるのかもしれません。

mio様 ありがとうございます。
再度この現象が発生したときに試してみます。

King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-04 10:27
気になる点です。

・3 行目でエラーが発生しているのは確かなのか。
・ここに記述されていない影響がありそうな処理はないか。
・「入力の数値が3桁の場合でも」とあるが該当行で inVar の中身が 3 桁のままである事を確認したか。
・inVar の型が文字列と数値どちらも取っているので変数をそれぞれに作るべきではないか。
1

スキルアップ/キャリアアップ(JOB@IT)