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

Formatについて

環境/言語:[環境Win2k 言語VB.NET]
分類:[.NET]

こんにちわ。
また初歩的な質問ですがよろしくお願い致します。m(_ _)m

StringクラスのFormatメソッドについてですが、例えば

Dim a, h As String
a = 32
h = hex(a)
String.Format("{0:0000}", h)

とすると、結果が20となってしまいます。
16進数にすると書式が変わらないのはなぜなのでしょうか?

私が出したい結果としては、上記の場合ですと0020と必ず4桁にしたいのです。

よろしくお願い致します。
■No14472に返信(もにさんの記事)
> 16進数にすると書式が変わらないのはなぜなのでしょうか?

この認識は誤りです。
String だから書式が変わらないだけです。

たとえば、次のコードは stTest は書式が形成されません。

Dim stTest As String = Microsoft.VisualBasic.Hex(32)
Dim iTest As Integer = Integer.Parse(stTest)

MessageBox.Show(String.Format("{0:0000}", stTest))
MessageBox.Show(String.Format("{0:0000}", iTest))

もにさんのソースですが、

> Dim a, h As String
> a = 32
> h = hex(a)

そもそも、a の型が一致していません。
a[String] = 32[Integer]

Option Strict を On にしておくことを強くお勧めします。

_________________________________________________________________________
じゃんぬ Microsoft MVP for Visual Developer - C#
  http://jeanne.wankuma.com/
  http://blogs.wankuma.com/jeanne/
> 私が出したい結果としては、上記の場合ですと0020と必ず4桁にしたいので

じゃんぬさんのご指摘がありますので、解決にしてほしくありませんが
別解として
Hex(32).PadLeft(4, "0"c)
というのがあります。
  • 題名: Re[2]: Formatについて
  • 著者: もに
  • 日時: 2006/01/12 16:41:22
  • ID: 14478
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
じゃんぬねっと様、ご回答ありがとうございます。

■No14474に返信(じゃんぬねっとさんの記事)
> String だから書式が変わらないだけです。
あ・・・お恥ずかしいorz
本当にすみません。(TT
そんなところに気づかなかったとは・・・
でも、なぜ
Dim a As String
で16進数に変換せず、Formatを使用して書式指定したときは4桁になったのだろう・・・
無意識にStringからIntegerに変えてやってたのかな。(^^;

> Option Strict を On にしておくことを強くお勧めします。
ご指摘ありがとうございます。
これからはOnにしてデバッグしていきます。

おかげさまで解決できました。(^^
ありがとうございました!
解決済み!
■No14477に返信(まどかさんの記事)
> 別解として
> Hex(32).PadLeft(4, "0"c)
> というのがあります。

文字列なんですから、0 パディングしたいのであれば、
String.PadLeft メソッドを使うべきかもしれませんね。(^-^.)

指定の文字数になるまで先頭を文字で埋める
http://jeanne.wankuma.com/tips/string/padleft.html


_________________________________________________________________________
じゃんぬ Microsoft MVP for Visual Developer - C#
  http://jeanne.wankuma.com/
  http://blogs.wankuma.com/jeanne/
解決済み!
  • 題名: Re[3]: Formatについて
  • 著者: もに
  • 日時: 2006/01/12 16:46:01
  • ID: 14481
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
あ・・・返信しているうちにレスが。。。(;;
ごめんなさいorz

> String.PadLeft メソッド
このメソッド初めて見ました(@@;

まどか様、別解いただきありがとうございます。
ちょっとString.PadLeftメソッドについて勉強してみます!

ありがとうございました。
解決済み!
#終わってますが。。。

>>Hex(32).PadLeft(4, "0"c)
>
> 文字列なんですから、0 パディングしたいのであれば、
> String.PadLeft メソッドを使うべきかもしれませんね。(^-^.)

Hex(Number As Hoge) As Stringなので、そう書いたのですが。。。(@_@;
解決済み!
■No14484に返信(まどかさんの記事)
> Hex(Number As Hoge) As Stringなので、そう書いたのですが。。。(@_@;

ぇ? 反論してませんよ?
 「Hex の戻り値は文字列だから、PadLeft を使うべきかもしれませんね」
と、同意してるんです。(^^;)

反論に見えました?
解決済み!
> 反論に見えました?

いえ、結果インスタンスクラスのメソッドと静的クラスのメソッドで動作に何か違いがあるのかなと思いました。
思いっきり調べてしまいました。。。
解決済み!
■No14488に返信(まどかさんの記事)
> いえ、結果インスタンスクラスのメソッドと静的クラスのメソッドで動作に何か違いがあるのかなと思いました。

いえいえ、PadLeft って静的メソッドじゃないですから... (^^;)
String クラスの PadLeft という意味です。

お許しを... (*_ _)
解決済み!

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