Search code examples
c#.net-2.0tostring

How can I format a value as a percentage without the percent sign?


float f = 0.479f;
Console.WriteLine(f.ToString("p1"));

The output: 47.9 %

What should I pass to ToString() in order to remove the percentage sign for output like this:

47.9

EDIT. I should have mentioned that I am passing the mask to a 3rd party component that does it's thing with it. I can't perform any acrobatics with the numbers unfortunately. It has to be the mask that does the trick.


Solution

  • I should have mentioned that I am passing the mask to a 3rd party component that does it's thing with it. I can't perform any acrobatics with the numbers unfortunately. It has to be the mask that does the trick.

    So I assume that you are stuck with Float.ToString(String), and that you cant only edit the p1 in f.ToString("p1"). Now that's a tricky one. If you're not afraid of breaking anything related to the changes implied, you could do the following:

    The "P" numeric format, as documented On MSDN, uses NumericFormatInfo.PercentSymbol in order to write the "%" sign. NumericFormatInfo is a member of your current CultureInfo. What you could do, is clone your CurrentCulture, and modify the PercentSymbol to "" like the following:

        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                float f = 0.479f;
                Console.WriteLine(f.ToString("p1")); //will write 47.9%
    
                CultureInfo ci = CultureInfo.CurrentCulture.Clone() as CultureInfo;
                ci.NumberFormat.PercentSymbol = "";            
    
                System.Threading.Thread.CurrentThread.CurrentCulture = ci;
                Console.WriteLine(f.ToString("p1")); //will write 47.9
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
    
            }
        }
    

    This would be the way to go if you don't want to alter the ToString call.