format関数の仕様でしょうか?


jupiter  2005-01-12 14:26:28  No: 87790  IP: [192.*.*.*]

数字の際の桁数を10桁に合わせたいと思い
Label1.Caption = Format(Text1, "0000000000")
という処理をしました。

その際の結果で不思議な現象が発生してしまいました。

Format(12345, "0000000000")は0000012345
Format(0123456789, "0000000000")は0123456789
という思った通りの結果となりました。

Format(abc, "0000000000")のような文字だとabcのままでした。
これは数字じゃないのでこういった結果になる事はおそらく仕様だと思うので納得しました。

しかし
Format(0410d122, "0000000000")という数値を入れると結果が
41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
というとんでもない結果が返ってきました。

この症状を解決する方法や原因をおわかりの方がいたら教えてください。
宜しくお願いします。

開発環境はWin2000SP4とVB6SP5です。

編集 削除
じゃんぬねっと  URL  2005-01-12 14:35:19  No: 87791  IP: [192.*.*.*]

4.1E+124 だからでは?

編集 削除
justice  2005-01-12 16:17:15  No: 87792  IP: [192.*.*.*]

0410d122=4.1E+124ということでしょうか?

編集 削除
じゃんぬねっと  URL  2005-01-12 16:39:07  No: 87793  IP: [192.*.*.*]

> 0410d122=4.1E+124ということでしょうか?
はい、そうですよ (^-^*)

で、解決方法を書いてませんでしたね...
ゼロパディングしたいだけならば、Format または Format$ を使わなくてもいいですよね?

  Right$(("0000000000" & strHoge), 10)

とか色々と方法はありますよね。

編集 削除
魔界の仮面弁士  2005-01-12 16:40:26  No: 87794  IP: [192.*.*.*]

> Format(0410d122, "0000000000")という 数値 を入れると結果が

"0410d122"が「数値」を表す表記である、という事はご存知なのですよね?

> 0410d122=4.1E+124ということでしょうか?

1.23E+45 という表現は、「1.23×(10の45乗)」を表します。
1.23D+45 も同様であるため、結果として、
  410D122 = 410E122 = 4.1E124 = 4.1 * 10^124
のような意味で処理されます。すなわち
  IsNumeric("0410d122")  → True
  Format("0410d122", "0.00E+000")  → "4.10E+124"
という事です。

# 昔のBASICでは、E と D の使い分けがなされていた事もありますが、
# 現在のVisual Basic では、E と D の差は無いようです。


で。同様の理由で、例えば下記のような結果にもなるわけです。
    Format("458,3D-53", "0.0E+0") → "4.6E-50"
    Format("458,3D", "0.0E+0") → "458,3D" のまま

編集 削除