Reputation: 32233
I have a number with a variable number of digits after the decimal point. I want to format the number with commas and all decimal numbers.
For example: 42,023,212.0092343234
If I use ToString("N") I get only 2 decimals, ToString("f") gives me all decimals no commas. How do I get both?
Upvotes: 12
Views: 17845
Reputation: 51
Let's try this
[DisplayFormat(DataFormatString = "{0:0,0.00}")]
Upvotes: 0
Reputation: 1921
Here is the way somewhat to reach to your expectation...
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));
For more detail about NumberFormatInfo.. look at MSDN ..
http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx
Upvotes: -1
Reputation: 128417
UPDATE: Looking at the MSDN documentation on the System.Double
type, I see this:
By default, a Double value contains 15 decimal digits of precision, although a maximum of 17 digits is maintained internally.
So I think pdr's on to something, actually. Just do this:
// As long as you've got at least 15 #s after the decimal point,
// you should be good.
value.ToString("#,#.###############");
Here's an idea:
static string Format(double value)
{
double wholePart = Math.Truncate(value);
double decimalPart = Math.Abs(value - wholePart);
return wholePart.ToString("N0") + decimalPart.ToString().TrimStart('0');
}
Example:
Console.WriteLine(Format(42023212.0092343234));
Output:
42,023,212.00923432409763336
Ha, well, as you can see, this gives imperfect results, due (I think) to floating point math issues. Oh well; it's an option, anyway.
Upvotes: 4
Reputation: 11759
string.Format("{0:#,##0.############}", value);
will give you up to 12 decimal places.
There is not a custom format specifier for "all following digits", so something like this will be closest to what you want.
Note too that you're limited by the precision of your variable. A double
only has 15-16 digits of precision, so as your left-hand side gets bigger the number of decimal places will fall off.
Upvotes: 4
Reputation: 6440
Not sure (and unable to test right now) but would something like this work?
"#,##0.################"
Upvotes: 14