- PR -

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

投稿者投稿内容
みかん
常連さん
会議室デビュー日: 2003/12/13
投稿数: 42
投稿日時: 2006-04-02 14:22
VB2005Expressを使用しています。
string型変数内に格納された0001500を
1500.000
と表示させたいと思っています。
そのため以下のコードを記述しましたが1500となってしまいます。
1500.000と表示させるにはどのようにしたらよろしいのでしょうか?

Dim Sdata1 As Double
Dim Ruikei As String
Ruikei = "0001500"
Sdata1 = CDbl(Ruikei)
Sdata1 = Format(Sdata1, "00.0000")



[ メッセージ編集済み 編集者: みかん 編集日時 2006-04-02 14:33 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-02 14:48
最後に受け取る Sdata1 が Double だからですね。
冗長な書式 (表示しなくても良い小数点以下) は数値型では表現できないでしょう。
文字列として表現させたいんじゃないんですか?

String.Format メソッドがお勧め && サンプルです。

  指定の書式の文字列に変換する

CLR の主役である型を意識するためにも Option Strict On にしましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
みかん
常連さん
会議室デビュー日: 2003/12/13
投稿数: 42
投稿日時: 2006-04-02 22:40
じゃんぬねっと様
返答有難うございます。
ご指摘の通り、文字列として表現させたかったのですが
Stringにすると0.000と表示されてしまうので
Doubleにしていました。
それと、サンプルの紹介有難うございます。
もう少し、String.Format メソッドについて調べてから
進めてみたいと思います。

Option Strict Onの存在自体知りませんでした。
どのように修正すべきかも表示してくれるので
助かりました。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-03 01:34
引用:

みかんさんの書き込み (2006-04-02 22:40) より:

ご指摘の通り、文字列として表現させたかったのですが
Stringにすると0.000と表示されてしまうのでDoubleにしていました。


Σ(;^o^) え? そうしたいんじゃなかったのでしょうか?
もし整数部のことを気にしているのであれば、"#,##0.000" というような書式を使いましょう。

引用:

Option Strict Onの存在自体知りませんでした。
どのように修正すべきかも表示してくれるので助かりました。


VB の場合「暗黙の型変換」という概念があったり、
「遅延バインディング」という概念があるため埋もれがちですが、
本来はやっぱり型は意識すべきことだと思います。

明示的なキャストをしないと予期せぬ事態が起きやすいです。
遅延バインディングについては、実行時にしか保証されないことがデメリットと言えるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-04-03 08:59
引用:

じゃんぬねっとさんの書き込み (2006-04-03 01:34) より:

明示的なキャストをしないと予期せぬ事態が起きやすいです。



私も先日、Jitta さんのブログを読ませていただいている時に、「Option Strict」は「On」にしましょう、とあったので試したところ、いっぱいエラーが出ました(;_;)

原因は、Session変数の値を利用する際に明示的な型変換をしていなかったためです。
明示的なキャストをする方法には「CType」と「DirectCast」の方法がありますよね。これは、どのように使い分けるものなのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-03 09:12
引用:

ひろれいさんの書き込み (2006-04-03 08:59) より:

明示的なキャストをする方法には「CType」と「DirectCast」の方法がありますよね。これは、どのように使い分けるものなのでしょうか?


ソースはないかと試しに「CType DirectCast」で検索してみたら...

  CType と DirectCast の違い (自分とこだった... orz)

使い分けとしては参照型か値型かでしょうね。(そんな場面があまりないわけですが)
まあ、型変換という意味では他にも色々ありますからね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-04-03 12:50
引用:

じゃんぬねっとさんの書き込み (2006-04-03 09:12) より:

ソースはないかと試しに「CType DirectCast」で検索してみたら...

  CType と DirectCast の違い (自分とこだった... orz)

使い分けとしては参照型か値型かでしょうね。(そんな場面があまりないわけですが)
まあ、型変換という意味では他にも色々ありますからね。


ありがとうございます。分かりやすいですね。

CInt と Int32.Parse と同じように、型変換を厳密に行なうかどうかという点も違うのですね。勉強になります。CType で Double型なんかをキャストしてたら、バグの温床になりそうですね・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-03 13:26
引用:

ひろれいさんの書き込み (2006-04-03 12:50) より:

CInt と Int32.Parse と同じように、型変換を厳密に行なうかどうかという点も違うのですね。


あー最初から、稍丼 さんが熱かった VSUG のスレ を出しておけば良かったですね。

引用:

CType で Double型なんかをキャストしてたら、バグの温床になりそうですね・・・


そうですね、やっぱり型は厳密に意識すべきです。
2.0 だと、値型すべてに [その型].TryParse + [その型].Parse がサポートされているので、嬉しいです。
変換前の検証がその型のメンバになっていた方がわかりやすいですもんね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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