タイトル : 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 などといった 個々の型に対するオーバーロードを実装してあげてください。 |