22

如何在 .NET 中将数字格式化为百分比而不显示百分号?

如果我有数字0.13并使用格式字符串{0:P0},则输出为13 %.

但是,我想得到13而不必将数字乘以 100 并使用格式 string {0:N0}

(背景:在 ASP.NET 中,我有一个带有 BoundField 的 GridView,我想将数字显示为百分比但没有百分号 (%)。我该怎么做?)


感谢您的回答。在编辑时,六分之四的建议我想避免,如上所述。我正在寻找一种仅使用格式字符串的方法,并避免乘以 100 并使用{0:N0},但答案表明这是不可能的......


通过使用Richard接受的解决方案来解决:


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

MSDN* 在“自定义数字格式字符串”下有这个:

格式字符串中存在“%”字符会导致数字在格式化之前乘以 100。适当的符号被插入到数字本身的格式字符串中出现“%”的位置。使用的百分比字符取决于当前的 NumberFormatInfo 类。

但是该示例显示它还输出 % 符号 - 不是您想要的,但也许可以通过 NumberFormatInfo 类设置为空?

但是,我同意 Pax,不明白为什么不使用 * 100 和 {0:N0}

**从 Visual Studio 中访问,因此没有链接*

于 2009-06-02T12:07:33.783 回答
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 回答
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 回答
0

这是另一种更短更简洁的方法。

$"{rate * 100:F2}"
于 2019-03-26T04:33:15.977 回答