3

次の基準で10進数をString.Formatする最もクリーンで読みやすい方法は何ですか?

  • 記号 (+ または -) で始まる
  • 小数桁の固定数
  • 小数点なし
  • 右揃え
  • 「0」が事前に埋め込まれています

例えば

  • 123,45 は「+0012345」になります
  • -1123,45 は "-0112345" になります。
4

2 に答える 2

6

ほとんどの場合、カスタム数値フォーマット文字列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)

于 2012-06-26T10:50:55.957 に答える
3

少し不器用に見えるので、もっと良いものがあるかもしれませんが、うまくいきます。

正と負の形式を指定して、正の数値と固定サイズの文字列にプラス記号を適用します。次に、 を使用InvariantCultureして小数点を小数点として強制します (他の文化も使用できます)。最後のステップは、ポイントを削除することです。

Dim value = -1123.45
Dim formatted = value.ToString(
        "+00000.00;-00000.00",
        System.Globalization.CultureInfo.InvariantCulture)
formatted = formatted.Replace(".", "")

ご覧のとおり、小数点記号を指定しない方法がわかりません。

于 2012-06-26T10:49:36.503 に答える