次の基準で10進数をString.Formatする最もクリーンで読みやすい方法は何ですか?
- 記号 (+ または -) で始まる
- 小数桁の固定数
- 小数点なし
- 右揃え
- 「0」が事前に埋め込まれています
例えば
- 123,45 は「+0012345」になります
- -1123,45 は "-0112345" になります。
次の基準で10進数をString.Formatする最もクリーンで読みやすい方法は何ですか?
例えば
ほとんどの場合、カスタム数値フォーマット文字列をString.Formatメソッドに渡す必要があります。
カスタム フォーマット文字列には、リテラル+
または-
. したがって、7 文字をゼロで埋めてフォーマットするには、次のようにします。
String.Format("{0:'+'0000000;'-'0000000}",yourValue);
ただし、これは小数を切り捨てるため、入力は次のようになります
123.45 --> +0000123
-1123.45 --> -0001123
簡単な解決策の 1 つは、数値を 100 倍して (10 進数の桁数を 2 に固定するため)、上記に渡すことです。
実際の例: http://rextester.com/SZR8690 (C# - 申し訳ありませんが、デモのみのアイデアです)
これは、拡張メソッドにまとめることができます。
<Extension()>
Public Function ToFixedFormat(ByVal value As Decimal, ByVal numFractionalDigits As Integer)
Return String.Format("{0:'+'0000000;'-'0000000}",value * Math.Pow(10,numFractionalDigits))
End Function
実際の例: http://rextester.com/LSAAA60214 (VB.NET)
少し不器用に見えるので、もっと良いものがあるかもしれませんが、うまくいきます。
正と負の形式を指定して、正の数値と固定サイズの文字列にプラス記号を適用します。次に、 を使用InvariantCulture
して小数点を小数点として強制します (他の文化も使用できます)。最後のステップは、ポイントを削除することです。
Dim value = -1123.45
Dim formatted = value.ToString(
"+00000.00;-00000.00",
System.Globalization.CultureInfo.InvariantCulture)
formatted = formatted.Replace(".", "")
ご覧のとおり、小数点記号を指定しない方法がわかりません。