Search code examples
c#decimalstring-formattingtostring

How to format a decimal without trailing zeros


I've just learned that a decimal somehow remembers how much trailaing zero's were needed to store a number. With other words: it remembers the size of the fraction.

For example:

123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123.00
123.450M.ToString() ==> resuls in: 123.450

I am looking for a formatting string or another trick to get rid of those "unneeded" trailing zeros, but keeping the significant digits. So:

123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123
123.450M.ToString() ==> resuls in: 123.45

Removing the zeros at the end of the new string is not a real option for me, because then I have to find out if the string contains a fraction and if so, also have to remove the optional '.' or ',' depending on the culture, etc.


Solution

  • There are several ways to do it, but since you are converting to a String object anyway, I suppose you could try something like this:

    myDecimalVariable.ToString("G29");

    or, using your code above, assuming 123.00M is your decimal:

    123.00M.ToString("G29");

    Here is the explanation of how that concise example works:

    The G format with a number means to format that many significant digits. Because 29 is the most significant digits that a Decimal can have, this will effectively truncate the trailing zeros without rounding.