Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I format a Decimal to a programatically controlled number of decimals in c#?

How can I format a number to a fixed number of decimal places (keep trailing zeroes) where the number of places is specified by a variable?

e.g.

int x = 3;
Console.WriteLine(Math.Round(1.2345M, x)); // 1.234 (good)
Console.WriteLine(Math.Round(1M, x));      // 1   (would like 1.000)
Console.WriteLine(Math.Round(1.2M, x));    // 1.2 (would like 1.200)

Note that since I want to control the number of places programatically, this string.Format won't work (surely I ought not generate the format string):

Console.WriteLine(
    string.Format("{0:0.000}", 1.2M));    // 1.200 (good)

Should I just include Microsoft.VisualBasic and use FormatNumber?

I'm hopefully missing something obvious here.

like image 887
Michael Haren Avatar asked Apr 14 '09 20:04

Michael Haren


1 Answers

Try

decimal x = 32.0040M;
string value = x.ToString("N" + 3 /* decimal places */); // 32.004
string value = x.ToString("N" + 2 /* decimal places */); // 32.00
// etc.

Hope this works for you. See

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

for more information. If you find the appending a little hacky try:

public static string ToRoundedString(this decimal d, int decimalPlaces) {
    return d.ToString("N" + decimalPlaces);
}

Then you can just call

decimal x = 32.0123M;
string value = x.ToRoundedString(3);  // 32.012;
like image 82
Nick Berardi Avatar answered Sep 20 '22 16:09

Nick Berardi