如何在.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();
答案 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}"