字符串格式的数字成千上万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)); 
+1

如果我使用它作为“#,## 0 ,,,。00B”这是四舍五入的最后一个小数位,但我不想要它。 – pxm 2014-03-11 09:09:17

+2

value.ToString( “0 ,,,。#B”,CultureInfo.InvariantCulture)=> 1.2B – NIBERIUM 2015-04-20 12:45:12

+0

任何方式与货币使用此? – 2017-05-22 14:14:45

您可以实现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 

它更大的数字,并喜欢它返回更多的细节。你还可以添加一些重写它支持intlongdouble没有铸造。