# Format double to 3 decimal places without decimal separator to a certain length

I need to format a double value to three decimal places to a string with length of 9 with leading spaces and no decimal separator.

My approach is this

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = "a";
nfi.NumberGroupSeparator = "";

double a = 334.44554;

Console.WriteLine(\$"{a.ToString("####0.000", nfi).Replace("a", ""), 9}");


Is there a more elegant way to do this?

• Do you need to format the number in a human-readable way, or for a computer program? The answer will be entirely different for each of these two cases. – Roland Illig Jul 6 '19 at 15:24

To truncate a double to 3 decimal places and remove the decimal separator, is I think more easily done by multiplying by 1000 and casting to an int. Padding the result to 9 digits is easily done with a format specifier in the ToString method. It could look something like this:

static string FormatNum(double num) => ((int)(num * 1000)).ToString("D9");


Note I've also put it in a method with an expression body.

I just noticed that you wanted the padding with spaces not zeros here's a version that does that:

static string FormatNum(double num) => string.Format("{0,9:D}",((int)(num * 1000)));


As was pointed out, your solution produced a rounded off number. If that is required here's one way:

static string FormatNum(double num) => string.Format("{0,9:D}",((int)(Math.Round(num * 1000))));