- - PR -
VBScriptで数値型に自動変換時にオーバーフローエラー
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 です。 かなり限定された情報ですみません。 心当たりのある方、ご教授ください。 同様の現象に遭ったことがある方もお願いします。 | ||||||||
|
投稿日時: 2009-02-03 20:12
参考になるかどうかはわかりませんが、
10桁ですと、Longに変換された場合はオーバーフローする場合がありますね。 Longで扱えない値の場合doubleになると思いますが、Longを要求する処理が後続にあるとそこで落ちるかもしれません
ただ
とおっしゃってますので関係なさそうですが。 | ||||||||
|
投稿日時: 2009-02-03 20:27
全然試してないんですが。
0 + inVar でも同じなんでしょうか? | ||||||||
|
投稿日時: 2009-02-04 10:06
デューン様 ありがとうございます。
いったんオーバーフローエラーが出る状態になると、入力の数値が3桁の場合でも オーバーフローが起きるのですが、どんなきっかけでこの状態に陥るのかが わかりません。 ただ、inVar=CCur(inVar) のように明示的にオーバーフローしにくい型に 変換することで回避できるのかもしれません。 mio様 ありがとうございます。 再度この現象が発生したときに試してみます。 | ||||||||
|
投稿日時: 2009-02-04 10:27
気になる点です。
・3 行目でエラーが発生しているのは確かなのか。 ・ここに記述されていない影響がありそうな処理はないか。 ・「入力の数値が3桁の場合でも」とあるが該当行で inVar の中身が 3 桁のままである事を確認したか。 ・inVar の型が文字列と数値どちらも取っているので変数をそれぞれに作るべきではないか。 |
1