• ベストアンサー

VisualBasic6.0 SP5 のおもしろバグ発見!?

おもしろい(?)というか、困った現象が起きました。 フォーマット関数での出来事です。 Format("12C33","000000") = 12C33 Format("12P33","000000") = 12P33 と、そのまま値が返ってくるのですが、 なぜか、アルファベット部分が『D』の場合のみ Format("12D33","000000") 12000000000000000000000000000000000 が返ってくるのです! これは何故なんでしょう!? 周知の事実なんでしょうか? どなたかご存知のかた教えてください。 このせいで、エラーが起きてしまう箇所を 発見しました。 VisualBasic プロフェッショナルの 皆様の回答お待ちしています。 単に無知なだけ??・・・(汗)

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

  • ベストアンサー
  • colocolo62
  • ベストアンサー率32% (1162/3624)
回答No.4

数値計算の歴史?から来た仕様といって良いのではないでしょうか。 計算機で大変大きな数値または大変小さな数値を取り扱う時に誤差を少なくするために、指数を使った浮動小数点で数値を表します。 それが、「12E33」のような表し方で定義されてきました。「E」はexponent(指数)のEです。 「12E33」×「1E-33」は、「12E0」となって答が出るのですが、これを固定小数点演算で計算すると、すごい桁数の演算器を用意しないと、答が「0」になってしまいます。 また、「D」は更に精度よく計算をするための倍精度の数値を表すために使われてきました。 「D」は、double precision(倍精度)のDです。

GBSGBS
質問者

お礼

なるほどー。分かりやすい回答ありがとうございました。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 ちなみに、「12E33」も同じです。 つまり、12×10の33乗。 なお、「12D-33」や「12E-33」は、 「000000」 です。 これは、12×10の-33乗と判断され、表示形式が整数6桁なので、小数部分が消えてしまうから。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 ちなみに、「12E33」も同じです。 つまり、12×10の33乗。 なお、「12D-33」や「12E-33」は、 「000000」 です。 これは、12×10の-33乗と判断され、表示形式が整数6桁なので、小数部分が消えてしまうから。

GBSGBS
質問者

お礼

おぉ、タイムリーな回答ありがとうございます! 仕様の一言で片付けられてしまいそうな予感が しますね・・。うーん。

noname#5584
noname#5584
回答No.1

> Format("12D33","000000") > 12000000000000000000000000000000000 > > が返ってくるのです! 12D33 → 12 × 10の33乗 と解釈されるようです。(D = Decimal の略?) ですので、バグではなく仕様だと思います。 IsNumeric("12D33") も True と評価されます。

GBSGBS
質問者

お礼

そうなのです。 IsNumericもTrueなんです。 こんな仕様アリなんでしょうか・・・。 ちなみにEでも同じようなことが起きるみたいです。 これも仕様なのでしょうか? さらに IsNumeric("D3")はfalseなんですよ・・・。 回答の論理でいうとTrueのはずなんですが。 Dが数字の間に挟まれる時のみに起きるんです。 こんな仕様ありなんでしょうか?

関連するQ&A