2013-06-05 55 views
2

在應用程序中我建設我需要格式化百分比方式如下:C#百分比格式化帶小數位在特殊情況下

.00012 -> 0.01% 
.0012 -> 0.12% 
.012 -> 1.2% 
.12 -> 12% 
1.12 -> 112% 

百分比是小於1應顯示2位小數。任何1或很大的值都應該只顯示一位小數。

當前我使用以下3部分格式字符串「0.0#%;(0.0#%); 0%;」,但我似乎無法得到這個以我需要的方式工作,具有不同數量的小數位取決於數量。如果可能的話,我想堅持使用3部分的數字格式,如果我不需要,我不希望任何乘法乘以100。

+0

這個期望的結果根據您的規格不正確:'0.012 - > 1.2%'。它應該有兩位小數,因爲'0.012'低於1. –

+0

@TimSchmelter我認爲他想表示(左側值* 100)低於1而不是(左側值)。 –

回答

4

使用conditional operator可將兩種情況都切換爲P格式說明符。

var decimals = new List<decimal>() { 0.00012m, .0012m, .012m, .12m, 1.12m }; 
var result = decimals 
    .Select(num => num >= 1 ? num.ToString("P1") : num.ToString("P2")); 

百分數的P-格式說明符正是你所追求的。

MSDN

數乘以100,並用百分比符號顯示。

+2

應該將'N'改爲'P',它支持'%' –

+0

@CongLe:謝謝,編輯。我剛剛意識到,OP想要將數字乘以100,這是「P」格式說明符隱含的含義。 –

+0

@ConongLe我不敢相信這裏有一個越南人聲譽如此之高。 :) - >只是自豪一點。 –

1

這應該得到你想要的東西:

Math.Round((percentage * 100), 2).ToString() + "%"; 

的代碼假定您的百分比存儲在百分比變量