字符串格式数字千位123K、百万位123M、十亿位123B
Posted
技术标签:
【中文标题】字符串格式数字千位123K、百万位123M、十亿位123B【英文标题】:String Format Numbers Thousands 123K, Millions 123M, Billions 123B 【发布时间】:2012-07-31 01:39:28 【问题描述】:有没有一种方法可以使用字符串格式化程序将 Thousands、Millions、Billions 格式化为 123K、123M、123B,而无需更改代码以将值除以 Thousand、Million 或 Billion?
String.Format("0:????", LargeNumber)
【问题讨论】:
【参考方案1】:有不同的方法可以实现这一点,但对我来说最简单快捷的是使用the "," custom specifier
double value = 1234567890;
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,568K
Console.WriteLine(value.ToString("#,##0,K", CultureInfo.InvariantCulture));
// Displays 1,235M
Console.WriteLine(value.ToString("#,##0,,M", CultureInfo.InvariantCulture));
// Displays 1B
Console.WriteLine(value.ToString("#,##0,,,B", CultureInfo.InvariantCulture));
【讨论】:
如果我使用它作为“#,##0,,,.00B”它会四舍五入最后一位小数,但我不想要它。 value.ToString("0,,,.#B", CultureInfo.InvariantCulture) => 1.2B 有什么方法可以将它与货币一起使用? 十万户呢?我怎样才能得到它?【参考方案2】:我在扩展方法中使用了这种混合格式(只需将其添加到您的项目中即可享受)?
public static string ToKMB(this decimal num)
if (num > 999999999 || num < -999999999 )
return num.ToString("0,,,.###B", CultureInfo.InvariantCulture);
else
if (num > 999999 || num < -999999 )
return num.ToString("0,,.##M", CultureInfo.InvariantCulture);
else
if (num > 999 || num < -999)
return num.ToString("0,.#K", CultureInfo.InvariantCulture);
else
return num.ToString(CultureInfo.InvariantCulture);
用途:
((decimal)235).ToKMB();
// 235
((decimal)1235).ToKMB();
// 1.2K
((decimal)6271235).ToKMB();
// 6.27M
((decimal)93246571235).ToKMB();
// 93.247B
注意事项:
它会为更大的数字返回更多细节,我喜欢它。
它也支持负数。 (感谢@Dusty 在 cmets 中的注释。
我在这个例子中为
decimal
数字写了一个方法,你可以为它写一些覆盖方法来支持int
、long
和double
在没有任何转换的情况下使用它,例如:
myIntNumber.ToKMB();
myLongNumber.ToKMB();
myDoubleNumber.ToKMB();
myDecimalNumber.ToKMB();
【讨论】:
十万户呢?我怎样才能得到它? @ChandanKumar,你的意思是像 100,000 这样的数字吗?我的扩展方法 (((decimal)100000).ToKMB()
) 为其返回此结果:100k
值得注意的是,如果所有 if
条件也涵盖否定条件,则这涵盖了更完整的用例……例如,if(num > 999 || num < -999)
。【参考方案3】:
您可以实现一个ICustomFormatter,将值除以千、百万或十亿,并像这样使用它:
var result = string.Format(new MyCustomFormatter(), "0:MyFormat", number);
【讨论】:
实现应该是ICustomFormatter和IFormatProvider接口以上是关于字符串格式数字千位123K、百万位123M、十亿位123B的主要内容,如果未能解决你的问题,请参考以下文章