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

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

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

但是我希望得到13而不必将数字乘以100并使用格式字符串{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(); 

使用自己的NumberFormatInfo定义自定义区域性,该PercentSymbol为其PercentSymbol属性返回String.Empty

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

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

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

但乘以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中

  

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

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

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

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

**从Visual Studio内访问所以没有链接*

这个怎么样…

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

编辑:这应该跨文化:

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

还有这种解决方案可能更优雅但代码更多。

修剪怎么样?

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

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

你也可以尝试类似的东西

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

以下是使用NumberFormatInfo的示例,如@Richard建议:

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