2013-06-05 40 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() + "%"; 

的代码假定您的百分比存储在百分比变量