アプリ版:「スタンプのみでお礼する」機能のリリースについて

おもしろい(?)というか、困った現象が起きました。

フォーマット関数での出来事です。

Format("12C33","000000") = 12C33
Format("12P33","000000") = 12P33

と、そのまま値が返ってくるのですが、


なぜか、アルファベット部分が『D』の場合のみ
Format("12D33","000000")
12000000000000000000000000000000000

が返ってくるのです!

これは何故なんでしょう!?
周知の事実なんでしょうか?
どなたかご存知のかた教えてください。
このせいで、エラーが起きてしまう箇所を
発見しました。


VisualBasic プロフェッショナルの
皆様の回答お待ちしています。

単に無知なだけ??・・・(汗)

A 回答 (4件)

数値計算の歴史?から来た仕様といって良いのではないでしょうか。



計算機で大変大きな数値または大変小さな数値を取り扱う時に誤差を少なくするために、指数を使った浮動小数点で数値を表します。

それが、「12E33」のような表し方で定義されてきました。「E」はexponent(指数)のEです。

「12E33」×「1E-33」は、「12E0」となって答が出るのですが、これを固定小数点演算で計算すると、すごい桁数の演算器を用意しないと、答が「0」になってしまいます。

また、「D」は更に精度よく計算をするための倍精度の数値を表すために使われてきました。
「D」は、double precision(倍精度)のDです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/07 13:10

こんにちは。

maruru01です。

ちなみに、「12E33」も同じです。
つまり、12×10の33乗。

なお、「12D-33」や「12E-33」は、
「000000」
です。
これは、12×10の-33乗と判断され、表示形式が整数6桁なので、小数部分が消えてしまうから。
    • good
    • 0

こんにちは。

maruru01です。

ちなみに、「12E33」も同じです。
つまり、12×10の33乗。

なお、「12D-33」や「12E-33」は、
「000000」
です。
これは、12×10の-33乗と判断され、表示形式が整数6桁なので、小数部分が消えてしまうから。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/06 18:15

> Format("12D33","000000")


> 12000000000000000000000000000000000
>
> が返ってくるのです!

12D33 → 12 × 10の33乗
と解釈されるようです。(D = Decimal の略?)
ですので、バグではなく仕様だと思います。

IsNumeric("12D33") も True と評価されます。
    • good
    • 0
この回答へのお礼

そうなのです。
IsNumericもTrueなんです。
こんな仕様アリなんでしょうか・・・。
ちなみにEでも同じようなことが起きるみたいです。
これも仕様なのでしょうか?

さらに
IsNumeric("D3")はfalseなんですよ・・・。
回答の論理でいうとTrueのはずなんですが。

Dが数字の間に挟まれる時のみに起きるんです。
こんな仕様ありなんでしょうか?

お礼日時:2003/10/06 18:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!