views:

120

answers:

2

The following code currently outputs:

12.1
12.100
12.1000
12.00
12
12.0000

How can I change it so it outputs:

12.1
12.1
12.1
12
12
12

Math.Round seems to be the thing, but it makes me define how many decimal places I want, but I want them to be variable as above.

If there is no mathematical way to do it, I'll just strip the zeros and decimal points off the right side of the strings, but would think there is a math way to handle this.

using System;
using System.Collections.Generic;

namespace Test8834234
{
    public class Program
    {
        static void Main(string[] args)
        {

            List<string> decimalsAsStrings = new List<string>
            {
                "12.1",
                "12.100",
                "12.1000",
                "12.00",
                "12",
                "12.0000"
            };

            foreach (var decimalAsString in decimalsAsStrings)
            {
                decimal dec = decimal.Parse(decimalAsString);
                Console.WriteLine(dec);
            }

            Console.ReadLine();

        }
    }
}
+3  A: 

Use:

 Console.WriteLine("{0:0.####}", dec);

Learn more about numeric format strings from here...

Hans Passant
+6  A: 

You can also use decimal's ToString with a parameter:

string s = dec.ToString("0.#");

Note: You may have an internationalization issue with your code. The way you have coded it, it will use the culture info from the user's computer, which may have something other than . for the decimal separator. This might cause your program to give incorrect results for users that have . for thousands separator.

If you want to guarantee that the parse method will always behave the same, you could use CultureInfo.InvariantCulture. If you do actually want to parse the string according to the user's culture settings, what you are doing is fine.

Mark Byers