DOBON.NET DOBON.NETプログラミング掲示板過去ログ

String.Formatできない件について

環境/言語:[WindwsXP .NET Framework2.0]
分類:[.NET]

VB2005で開発を行っています。

私の環境では
String.Format("{0:0000}", num)で引数numの値が4桁のゼロ埋め→0001
とされるのですが、別の環境ではFormatされません。
String.Format("{0:4D}", num)とすればゼロ埋めフォーマットされます。
ちなみに引数numはオブジェクト型です。

コードは私の開発したものをコピーしたので同じものです。
VS2005も同じ、OSもWindowsXPで同じです。

なぜこのように違いが現れるのでしょうか?

また私の環境でビルドしたexeをコピーして動かしても結果は同じでした。
■No21155に返信(はるさんの記事)
> 別の環境ではFormatされません。

その環境の違いを書かないことには何もお答えしようがないと思われます。
■No21156に返信(じゃんぬねっとさんの記事)
> ■No21155に返信(はるさんの記事)
>>別の環境ではFormatされません。
>
> その環境の違いを書かないことには何もお答えしようがないと思われます。

すみません。
String.Format("{0:4D}", num)でもゼロ埋めされませんでした。
String.padright(10,"0"c)は動作するようです。

環境の違いですが、どこに着目していいかがわからず、
確認したのはOSとVS2005のバージョンのみです。

MSDNを再度読み込んでみたところ、
今、地域のプロパティの設定値も影響するかもしれないと思い
違いを確認しています。

別途インストールされているソフトによっても違いが出てくることが
あるのでしょうか?
dllに着目して調べるべきでしょうか?

どこの違いでこのような結果の差異がでてくるのか、
違いを確認すべき箇所に検討がつかず今回質問させていただいてます。
また同じような現象を経験された方がいらっしゃったらと思い
投稿いたしました。
■No21158に返信(はるさんの記事)
例えば、Object 型の内部形式が文字列型なら Format されないのでは?
Dim num As Object
num = "1"
Debug.WriteLine(num.GetType)
Debug.WriteLine(String.Format("{0:0000}", num))
num = 1
Debug.WriteLine(num.GetType)
Debug.WriteLine(String.Format("{0:0000}", num))
■No21159に返信(るしぇさんの記事)
> ■No21158に返信(はるさんの記事)
> 例えば、Object 型の内部形式が文字列型なら Format されないのでは?
> Dim num As Object
> num = "1"
> Debug.WriteLine(num.GetType)
> Debug.WriteLine(String.Format("{0:0000}", num))
> num = 1
> Debug.WriteLine(num.GetType)
> Debug.WriteLine(String.Format("{0:0000}", num))
>

お世話になります。

その通りでした!

先ほどもしやと思い、numを数値変換してからString.Formatするように
書き換えてみたところ、動作していました。

ただ、いまだなぜ私の環境ではObject型の内部形式が数値と判断され
Formatされていたのかが不明です。。。
解決済み!
2007/12/19(Wed) 10:18:19 編集(投稿者)

■No21160に返信(はるさんの記事)
> ただ、いまだなぜ私の環境ではObject型の内部形式が数値と判断され
> Formatされていたのかが不明です。。。

変数の型は System.Object 型ですが中身のデータの型が数値型だったとしか考えられないですね。
まったく同じソースという確証が閲覧者には得られないので本来は何とも言えないですが。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板