2009-06-02 252 views
19

我如何在.NET中將數字格式化爲百分比而不顯示百分比符號?如何將數字格式化爲不帶百分比符號的百分比?

如果我有號碼0.13並使用格式字符串{0:P0}輸出是13 %

不過,我想獲得13代替,無需通過100乘以數量和使用格式字符串{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(); 
+1

乘以100會出現什麼問題? –

+2

它沒有錯;除了我想更改數字的顯示而不更改數據查詢。特別是我想知道如何顯示一個數字,例如0.13在ASP.NET中的BoundField中爲13 - 沒有百分比符號。 –

回答

15

定義一個自定義的文化有自己的NumberFormatInfo這對於其PercentSymbol屬性返回String.Empty

然後針對受影響的頁面(或整個應用程序)使用該自定義文化。這可以通過從默認值克隆來完成,以便保留其他區域設置。

+0

謝謝!是的,這的確有訣竅! –

14

爲什麼不把數字乘以100並使用"{0:N0}"格式字符串?這在我看來是最簡單的解決方案。

除非你能想出一個可行的理由,爲什麼這是不可能的,這是我的建議。這不是火箭科學:-)

+0

+1這是要麼這或格式化到{0:P0} – fretje

+0

謝謝。這是否意味着無法縮放格式字符串中的數字?也許我應該制定另一個這樣的問題。 –

2

的MSDN *有這個在「自定義數字格式字符串」:

一個「%」字符在 格式字符串中的存在導致了一些被 乘以100之前是 格式化。 格式字符串中出現'%'的位置在 位置插入數字本身的適當符號 。使用的字符百分比 取決於當前的 NumberFormatInfo類。

但是這個例子顯示它也輸出%符號 - 不是你想要的,但可能通過NumberFormatInfo類設置爲無效?

不過,我贊同大同並不能看到,爲什麼不與* 100去和{0:N0}

**從Visual Studio中訪問所以沒有鏈接*

2

這個怎麼樣?

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

編輯:這應該跨文化工作:

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

也有this solution這可能是更優雅,但更多的代碼。

+1

替換(「%」... - 我包含空格的東西......或修剪最終結果:) – balexandre

+4

這可能會在某些情況下失敗,使用的%符號會受到文化的影響。 – CiscoIPPhone

+0

+1「受文化影響」 –

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}" /> 
0

如何微調?

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

首先要考慮的一點,沒有%顯示的百分比是一個數字,所以我們忽略百分比方面。你想知道如何顯示一個小於或等於100的數字。我很欣賞它的約束,所以你不能在顯示時修改它,爲什麼不在查詢時修改它,即SELECT(值* 100)AS Percentage,...?

0

你也可以嘗試像

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