簡體   English   中英

如何用逗號和小數格式化C#中的數字?

[英]How do I format a number in C# with commas and decimals?

我有一個小數點后可變位數的數字。 我想用逗號和所有十進制數格式化數字。

例如:42,023,212.0092343234

如果我使用ToString(“N”)我只得到2位小數,ToString(“f”)給我所有小數都沒有逗號。 我如何得到兩者?

不確定(現在無法測試)但是這樣的工作會怎么樣?

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

最多可以給你12位小數。

“所有后續數字”沒有自定義格式說明符,因此這樣的內容最接近您想要的內容。

另請注意,您受變量精度的限制。 double精度只有15-16位數的精度,所以當您的左側變大時,小數位數將減少。

更新 :看看System.Double類型MSDN文檔 ,我看到:

默認情況下,Double值包含15個十進制數字的精度,但內部最多保留17位數。

所以我認為實際上是對某些事情的看法。 這樣做:

// 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

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

嘗試ToString("N2")

我們來試試吧

[DisplayFormat(DataFormatString = "{0:0,0.00}")]

這是達到你期望的方式......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM