2010-07-22 99 views
11

我在小數點後有一個數字可變的數字。我想用逗號和所有十進制數字格式化數字。如何用逗號和小數格式化C#中的數字?

例如:42,023,212.0092343234

如果我使用的ToString( 「N」),我只得到2位小數,的ToString( 「F」)給了我所有小數沒有逗號。我如何獲得這兩個?

回答

12

不確定(現在無法測試),但會有這樣的工作嗎?

"#,##0.################" 
+0

到目前爲止,只要小數不超過#的數量,它就會工作......我希望避免這個選擇,但如果它是唯一的方法..... – NotDan 2010-07-22 18:29:24

+0

好的呼叫。我說這是最好的答案。 – 2010-07-22 18:31:27

1

嘗試ToString("N2")

+0

只顯示最後2小數點,我希望它顯示所有這些,但小數的數量將從0-? – NotDan 2010-07-22 18:16:56

2

UPDATE:縱觀MSDN documentation on the System.Double type,我看到:

默認情況下,雙值包含的精度15個 十進制數字,雖然 最多17位內部維護 。

所以我認爲pdr's on to something,實際上。只是這樣做:

// As long as you've got at least 15 #s after the decimal point, 
// you should be good. 
value.ToString("#,#.###############"); 

這裏有一個想法:

static string Format(double value) 
{ 
    double wholePart = Math.Truncate(value); 
    double decimalPart = Math.Abs(value - wholePart); 
    return wholePart.ToString("N0") + decimalPart.ToString().TrimStart('0'); 
} 

例子:

Console.WriteLine(Format(42023212.0092343234)); 

輸出:

42,023,212.00923432409763336

哈,好吧,正如你所看到的,這給出了不完美的結果,歸因於(我認爲)浮點數學問題。好吧;無論如何,這是一個選項。

+0

這可能會工作,但我想獲得一個格式字符串,我可以給一個網格控制,或其他任何理解。淨格式,所以它可以爲我做格式,我可以給它的實際價值。 – NotDan 2010-07-22 18:23:12

4
string.Format("{0:#,##0.############}", value); 

會給你最多12位小數。

沒有一個「所有後面的數字」的自定義格式說明符,所以類似這樣的將最接近你想要的。

請注意,您受限於變量的精度。 A double只有15-16個數字的精度,所以當您的左手邊變大時,小數位數將會減少。

-1

這裏有點要達到您的期望的方式......

decimal d = 42023212.0092343234M; 

NumberFormatInfo nfi = (NumberFormatInfo) CultureInfo.InvariantCulture.NumberFormat.Clone(); 

nfi.NumberDecimalDigits= (d - Decimal.Truncate(d)).ToString().Length-2; 

Console.WriteLine(d.ToString("N",nfi)); 

有關的NumberFormatInfo詳細..看MSDN ..

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx

+0

可能是因爲你正在對絃線進行雙重投射。 – 2010-07-22 20:13:12

相關問題