字符串格式的数字成千上万123K,数以百万计123M,十亿123B
问题描述:
是否有使用字符串格式化到十万,几百万,十亿格式化到123K,123M,123B的方式,而无需更改代码以千,万或十亿分值?字符串格式的数字成千上万123K,数以百万计123M,十亿123B
String.Format("{0:????}", LargeNumber)
答
有不同的方式来实现这一点,但对我来说最简单,最快的方法是使用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));
答
您可以实现ICustomFormatter,其将由千,万或十亿的价值,并使用它像这样:
var result = string.Format(new MyCustomFormatter(), "{0:MyFormat}", number);
+0
该实现应该是ICustomFormatter和IFormatProvider接口 – KD2ND 2018-01-18 11:26:45
答
我使用的格式,这个组合在一个扩展方法(只需将其添加到您的项目,并享受)
public static string ToKMB(this decimal num)
{
if (num > 999999999)
{
return num.ToString("0,,,.###B", CultureInfo.InvariantCulture);
}
else
if (num > 999999)
{
return num.ToString("0,,.##M", CultureInfo.InvariantCulture);
}
else
if (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
它更大的数字,并喜欢它返回更多的细节。你还可以添加一些重写它支持
int
,long
和double
没有铸造。
如果我使用它作为“#,## 0 ,,,。00B”这是四舍五入的最后一个小数位,但我不想要它。 – pxm 2014-03-11 09:09:17
value.ToString( “0 ,,,。#B”,CultureInfo.InvariantCulture)=> 1.2B – NIBERIUM 2015-04-20 12:45:12
任何方式与货币使用此? – 2017-05-22 14:14:45