tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: tostringを改良したい
投稿日: 2012/08/14(Tue) 16:10
投稿者魔界の仮面弁士
> (123.456).ToStringF(8,2)
> 「  123.46」
> となります

個人的にはあまり好きではないのですが、実装自体は可能ですよ。


Public Class Form1
    Private Sub Button1_Click() Handles Button1.Click
        TextBox1.Text = (123.456).ToStringF(8, 2)
        TextBox2.Text = (123456).ToStringF(8, 0)

        Dim a = 12.3456
        Dim b = 9.87654

        Debug.Print("{0,6:N2}と{1,5:N3}", a, b)
        Debug.Print("{0,6:F2}と{1,5:F3}", a, b)
        Debug.Print(a.ToStringF(6, 2) & "と" & b.ToStringF(5, 3))
    End Sub

    Private Sub Form1_Load() Handles MyBase.Load
        Dim f As New Font("Consolas", 15)
        TextBox1.Font = f
        TextBox2.Font = f
    End Sub
End Class

Module Sigechin
    <System.Runtime.CompilerServices.Extension()> _
    Public Function ToStringF(Of T As IFormattable)(value As T, a As Byte, b As Byte) As String
        If b = 0 Then
            Return value.ToString("0", Nothing).PadLeft(a)
        Else
            Return value.ToString("0." & StrDup(b, "0"c), Nothing).PadLeft(a)
        End If
    End Function
End Module



手抜きコードなので、このままだと Now.ToStringF(3, 0) などとも
書けてしまう(しかも実行時エラー)という問題があります。

それを嫌う場合にはジェネリックを使わず、Double/Integer などといった
個々の型に対するオーバーロードを実装してあげてください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。