- PR -

Format関数で小数点以下の0を表示するには?

投稿者投稿内容
みかん
常連さん
会議室デビュー日: 2003/12/13
投稿数: 42
投稿日時: 2006-04-03 23:30
じゃんぬねっと様
返答有難うございます。
ご助言を受けまして下記のように修正してみました。
Dim Sdata1 As String
Dim Ruikei As String
Ruikei = "0001500.12345"
Sdata1 = String.Format("#,##0.000", Ruikei)
MessageBox.Show(CStr(Sdata1))
上記のように記述したところ、#,##0.000が表示されましたので
どうも#,##0.000がそのままSdata1に格納されているようなのです。
String.Formatをヘルプで調べて見ましたが特に
原因が分かりませんでした。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-04-04 00:40
原因が二つ重なってますね。
一つは、String.Format を使う際、第二引数以降の引数を第一引数に与える文字列のどこに適用するか、を決定するために、第一引数の文字列(書式指定文字列)には独特の表記をするという点です。
http://msdn2.microsoft.com/ja-jp/library/fht0f5be(VS.80).aspx
の format パラメータに与える文字列の例、それにサンプルコードをよく読んでください。{0:d} みたいな表記になっているはずです。
この { } で、何番目の引数を使うか、どういう書式を適用するか、を指定するのです。
これは書式指定文字列以外の引数が一つだけでも変わりません。
ちなみに Double の ToString メソッドとかは、直接 書式指定文字列を指定します。

もう一つは、数値書式指定文字列は、あくまで数値に対してしか使えないという点です。
数値とは、Integer や Double などの単純数値型を指します。
文字列型に対しては数値書式指定文字列を適用することはできません。
もし "1500.234" という文字列に対して数値書式指定文字列で書式指定したい場合、一旦 Double.TryParse などで Double 型の数値に変換する必要があります。

それから、わざわざカスタム数値書式指定文字列を使わなくても、標準数値書式指定文字列で解決できるかも知れません。
http://msdn2.microsoft.com/ja-jp/library/dwhawy9k(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/0c899ak8(VS.80).aspx
// カスタム数値書式指定文字列の 0 は、小数点以下に適用した場合、端数を丸めることに注意してください。

あと、String.Format が返す値を格納する Sdata1 は String 型なのですから、CStr する意味はありません。
みかん
常連さん
会議室デビュー日: 2003/12/13
投稿数: 42
投稿日時: 2006-04-05 17:55
Hongliang様
ご回答有難うございます。
ご教授いただいた内容及び、URLを参照し、
また、標準の数値書式指定文字列の出力例
http://msdn2.microsoft.com/ja-jp/library/241ad66z(VS.80).aspx
も参考にし下記のようにすることで
目的の結果を得ることが出来ました。
Dim Sdata1 As Double
Sdata1 = CDbl(TextBox1.Text)
MsgBox(Sdata1.ToString("N3"))
結果的に、じゃんぬねっと様からの
最初のご助言どおりToStringを使用し解決できました。
有難うございました。

スキルアップ/キャリアアップ(JOB@IT)