我在小數點後有一個數字可變的數字。我想用逗號和所有十進制數字格式化數字。如何用逗號和小數格式化C#中的數字?
例如:42,023,212.0092343234
如果我使用的ToString( 「N」),我只得到2位小數,的ToString( 「F」)給了我所有小數沒有逗號。我如何獲得這兩個?
我在小數點後有一個數字可變的數字。我想用逗號和所有十進制數字格式化數字。如何用逗號和小數格式化C#中的數字?
例如:42,023,212.0092343234
如果我使用的ToString( 「N」),我只得到2位小數,的ToString( 「F」)給了我所有小數沒有逗號。我如何獲得這兩個?
不確定(現在無法測試),但會有這樣的工作嗎?
"#,##0.################"
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
哈,好吧,正如你所看到的,這給出了不完美的結果,歸因於(我認爲)浮點數學問題。好吧;無論如何,這是一個選項。
這可能會工作,但我想獲得一個格式字符串,我可以給一個網格控制,或其他任何理解。淨格式,所以它可以爲我做格式,我可以給它的實際價值。 – NotDan 2010-07-22 18:23:12
string.Format("{0:#,##0.############}", value);
會給你最多12位小數。
沒有一個「所有後面的數字」的自定義格式說明符,所以類似這樣的將最接近你想要的。
請注意,您受限於變量的精度。 A double
只有15-16個數字的精度,所以當您的左手邊變大時,小數位數將會減少。
這裏有點要達到您的期望的方式......
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
可能是因爲你正在對絃線進行雙重投射。 – 2010-07-22 20:13:12
到目前爲止,只要小數不超過#的數量,它就會工作......我希望避免這個選擇,但如果它是唯一的方法..... – NotDan 2010-07-22 18:29:24
好的呼叫。我說這是最好的答案。 – 2010-07-22 18:31:27