2012-07-31 95 views

回答

53

有不同的方式來實現這一點,但對我來說最簡單,最快的方法是使用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

4

您可以實現ICustomFormatter,其將由千,萬或十億的價值,並使用它像這樣:

var result = string.Format(new MyCustomFormatter(), "{0:MyFormat}", number); 
+0

該實現應該是ICustomFormatter和IFormatProvider接口 – KD2ND 2018-01-18 11:26:45

4

我使用的格式,這個組合在一個擴展方法(只需將其添加到您的項目,並享受)

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沒有鑄造。

相關問題