8

私はこれを探していましたが、答えが見つからないようです。String.Format から必要な対応する出力を含む次の小数があります。

100.00 -> 100
100.50 -> 100.50
100.51 -> 100.51

私の問題は、100.50 の末尾に 0 を保持し、100 から 2 つのゼロを削除する形式が見つからないように見えることです。

どんな助けでも大歓迎です。

EDIT より明確にするために。10 進数型の変数がありますが、小数点以下 2 桁しかありません。基本的には小数点以下2桁まで表示したいのですが、100.50が100.5になった場合は小数点以下1桁まで表示したくありません。

4

5 に答える 5

15

私の知る限り、そのような形式はありません。これは手動で実装する必要があります。例:

String formatString = Math.Round(myNumber) == myNumber ? 
                      "0" :     // no decimal places
                      "0.00";   // two decimal places
于 2012-07-27T07:45:21.037 に答える
14

これを使用できます:

string s = number.ToString("0.00");
if (s.EndsWith("00"))
{
    s = number.ToString("0");
}
于 2012-07-27T07:45:14.473 に答える
5

数値が整数かどうかをテストし、それに応じた形式を使用します。

string.Format((number % 1) == 0 ? "{0}": "{0:0.00}", number)
于 2012-07-27T07:45:58.510 に答える
2

わかりました、これは私の目を痛めますが、あなたが望むものを与えるはずです:

string output = string.Format("{0:N2}", amount).Replace(".00", "");

更新: Heinziの答えがもっと好きです。

于 2012-07-27T07:45:36.937 に答える
1

このアプローチは、指定されたカルチャを適用しながら、望ましい結果を達成します。

decimal a = 100.05m;
decimal b = 100.50m;
decimal c = 100.00m;

CultureInfo ci = CultureInfo.GetCultureInfo("de-DE");

string sa = String.Format(new CustomFormatter(ci), "{0}", a); // Will output 100,05
string sb = String.Format(new CustomFormatter(ci), "{0}", b); // Will output 100,50
string sc = String.Format(new CustomFormatter(ci), "{0}", c); // Will output 100

必要に応じて、カルチャを CultureInfo.CurrentCulture またはその他のカルチャに置き換えることができます。

CustomFormatter クラスは次のとおりです。

public class CustomFormatter : IFormatProvider, ICustomFormatter
{
    public CultureInfo Culture { get; private set; }

    public CustomFormatter()
        : this(CultureInfo.CurrentCulture)
    { }

    public CustomFormatter(CultureInfo culture)            
    {
        this.Culture = culture;
    }

    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
            return this;

        return null;
    }

    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (formatProvider.GetType() == this.GetType())
        {
            return string.Format(this.Culture, "{0:0.00}", arg).Replace(this.Culture.NumberFormat.NumberDecimalSeparator + "00", "");
        }
        else
        {
            if (arg is IFormattable)
                return ((IFormattable)arg).ToString(format, this.Culture);
            else if (arg != null)
                return arg.ToString();
            else
                return String.Empty;
        }
    }
}
于 2012-07-27T13:55:00.347 に答える