如何在没有百分号的情况下将数字格式化为百分比?

时间:2009-06-02 12:00:27

标签: c# string-formatting

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

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

但是我想改为13没有必须将数字乘以100并使用格式字符串{0:N0}

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


感谢您的回答。在编辑时,如上所述,在6个中有4个表示我想要避免的内容。我一直在寻找一种方法来使用格式字符串,避免乘以100并使用{0:N0},但答案表明这是不可能的......


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


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

Thread.CurrentThread.CurrentCulture = new MyCulture();

10 个答案:

答案 0 :(得分:16)

使用自己的NumberFormatInfo定义自定义文化,并为其PercentSymbol属性返回String.Empty

然后将该自定义文化用于受影响的页面(或整个应用程序)。这可以通过从默认值中克隆来完成,以便保留其他区域设置。

答案 1 :(得分:14)

为什么不将数字乘以100并使用"{0:N0}"格式字符串?在我看来,这是最简单的解决方案。

除非你能找到一个可行的理由,为什么那是不可能的,这是我的建议。这不是火箭科学: - )

答案 2 :(得分: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}" />

答案 3 :(得分:2)

MSDN *在“自定义数字格式字符串”下具有此功能:

  

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

但是这个例子表明它也输出%符号 - 不是你想要的,但可能通过NumberFormatInfo类可以设置为空?

但是,我同意Pax并且不明白为什么不选择* 100和{0:N0}

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

答案 4 :(得分:2)

这个怎么样......

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

编辑:这应该适用于各种文化:

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

还有this solution可能更优雅但代码更多。

答案 5 :(得分:0)

修剪怎么样?

double d = .102;
string percent = d.ToString("P0").Trim(' ', '%');

答案 6 :(得分:0)

要考虑的要点,显示没有%的百分比是一个数字,所以让我们忽略百分比方面。您想知道如何将1或更小的数字显示为100或更少。我很欣赏它的约束,所以你不能在显示时修改它,所以为什么不在查询时修改它,即SELECT(值* 100)AS百分比,......?

答案 7 :(得分:0)

您也可以尝试类似

的内容
string newString = "0.13".Replace("0.", string.Empty) + "%";

答案 8 :(得分:0)

以下是使用NumberFormatInfo作为@Richard建议的示例:

string.Format(new NumberFormatInfo { PercentSymbol = string.Empty }, "{0:0%}", 0.123); // => 12

答案 9 :(得分:0)

这是另一种更短,更干净的方法。

$"{rate * 100:F2}"