22

.NET でパーセント記号を表示せずに数値をパーセンテージとしてフォーマットするにはどうすればよいですか?

数値が0.13あり、フォーマット文字列を使用すると{0:P0}、出力は13 %.

ただし、数値に100を掛けたり、フォーマット文字列を使用したりすることなく13、代わりに取得したいと思います。{0:N0}

(背景: ASP.NET では、BoundField を持つ GridView があり、数値をパーセンテージとして表示したいが、パーセンテージ記号 (%) は使用しないでください。どうすればよいですか?)


答えてくれてありがとう。上記で説明したように、編集時に6つのうち4つが避けたいことを示唆しています。フォーマット文字列のみを使用し、100 を掛けて を使用しないようにする方法を探していました{0:N0}が、答えはそれが不可能であることを示しています...


リチャードによって受け入れられた解決策を使用して解決されました:


public class MyCulture : CultureInfo
{
    public MyCulture()
        : base(Thread.CurrentThread.CurrentCulture.Name)
    {
        this.NumberFormat.PercentSymbol = "";
    }
}

Thread.CurrentThread.CurrentCulture = new MyCulture();
4

10 に答える 10

16

NumberFormatInfoプロパティを返す独自のカスタム カルチャを定義String.EmptyPercentSymbolます。

次に、影響を受けるページ (またはアプリケーション全体) にそのカスタム カルチャを使用します。これは、デフォルトからクローンを作成することで実行できるため、他の地域設定が保持されます。

于 2009-06-02T12:49:23.637 に答える
14

数値に 100 を掛けて、"{0:N0}"フォーマット文字列を使用してみませんか? それが私には最も簡単な解決策のようです。

それが問題外である実行可能な理由を考え出すことができない限り、それが私のアドバイスです. それはロケット科学ではありません:-)

于 2009-06-02T12:03:47.257 に答える
5

しかし、100を掛けることはまさにあなたが望むものです!

protected void myGrdiView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        myObjectType ot = (myObjectType)e.Row.DataItem;

        ot.myNumber = ot.myNumber * 100; // multiply by 100
    }
}

とHTMLで

<asp:BoundField DataType="myNumber" HeaderText="%" StringFormat="{0:N0}" />
于 2009-06-02T12:08:53.360 に答える
2

これはどう...

String.Format("{0:P0}",0.13).Replace("%","")

編集:これは文化を超えて機能するはずです:

var percentSymbol = CultureInfo.CurrentCulture.NumberFormat.PercentSymbol;
String.Format("{0:P0}",0.13).Replace(percentSymbol,"")

このソリューションもあります。これは、よりエレガントですが、コードが少し多い場合があります。

于 2009-06-02T12:08:28.477 に答える
2

MSDN * には、「カスタム数値形式文字列」の下にこれがあります。

フォーマット文字列に '%' 文字が含まれていると、数値がフォーマットされる前に 100 が乗算されます。適切な記号が、書式文字列で「%」が表示される位置の数値自体に挿入されます。使用されるパーセント文字は、現在の NumberFormatInfo クラスによって異なります。

しかし、この例は、% 記号も出力することを示しています。これは、希望するものではありませんが、NumberFormatInfo クラスを介して何も設定できない可能性がありますか?

しかし、私は Pax に同意し、* 100 と {0:N0} を使用しない理由がわかりません。

**Visual Studio 内からアクセスするため、リンクはありません*

于 2009-06-02T12:07:33.783 に答える
0

トリムはどうですか?

double d = .102;
string percent = d.ToString("P0").Trim(' ', '%');
于 2009-06-02T12:10:58.940 に答える
0

最初に考慮すべき点ですが、%なしで表示されるパーセンテージは数値なので、パーセンテージの側面は無視してください。1以下の数値を100以下として表示する方法を知りたい。バインドされているため、表示時に変更できないので、クエリ時に変更してみませんか。つまり、SELECT(value * 100)AS Percentage、...?

于 2009-06-02T12:13:00.467 に答える
0

次のようなものを試すこともできます

string newString = "0.13".Replace("0.", string.Empty) + "%";
于 2009-06-02T12:31:50.007 に答える
0

@Richardが提案したNumberFormatInfoを使用した例を次に示します。

string.Format(new NumberFormatInfo { PercentSymbol = string.Empty }, "{0:0%}", 0.123); // => 12
于 2018-06-28T11:24:45.743 に答える