In C# programs we often find percentages helpful. With the numbers 1 and 2, we can get a percentage of 50%. We display and process percentages with doubles.
With these methods, we solve an annoying rounding problem. Percentages can often be used to improve displayed values for users.
We use string.Format
to display 2 numbers or ratio as a percentage. The 3 methods all handle percentages. But their logic is implemented in different ways.
DisplayPercentage
accepts a double
that is a ratio. The "0.0%" indicates a percentage with 1 digit past the decimal place.DisplayPercentage
accepts 2 parameters and then passes the ratio of them to the other method. It casts to double
.GetPercentageString
accepts a double
containing a ratio and returns a percentage string
using ToString()
.using System; class Program { static void Main() { // Display percentage of visits that resulted in purchases. int purchases = 10; int visitors = 120; DisplayPercentage((double)purchases / visitors); // Display 50 percent with overloaded method. DisplayPercentage(1, 2); // Write percentage string of nine tenths. Console.WriteLine(GetPercentageString((double)9 / 10)); } /// <summary> /// This method writes the percentage form of a double to the console. /// </summary> static void DisplayPercentage(double ratio) { string percentage = string.Format("Percentage is {0:0.0%}", ratio); Console.WriteLine(percentage); } /// <summary> /// This method writes the percentage of the top number to the bottom number. /// </summary> static void DisplayPercentage(int top, int bottom) { DisplayPercentage((double)top / bottom); } /// <summary> /// This method returns the percentage-formatted string. /// </summary> static string GetPercentageString(double ratio) { return ratio.ToString("0.0%"); } }Percentage is 8.3% Percentage is 50.0% 90.0%
Here we convert 2 integers into a percentage manually with division and multiplication. Sometimes you can need raw percentages.
double
must be assigned to a value cast to double
. If you omit the cast, your value will be rounded and probably useless.double
, you do not need to surround the entire expression with parentheses.Math.Floor
rounds down to the nearest integer. And Math.Ceiling
rounds up to the nearest integer.using System; class Program { static void Main() { // We want to have 92.9% from these two numbers. int valid = 92; int total = 99; // First multiply top by 100 then divide. double percent = (double)(valid * 100) / total; // <-- Use cast // This is the percent number. Console.WriteLine(percent); Console.WriteLine(Math.Floor(percent)); Console.WriteLine(Math.Ceiling(percent)); Console.WriteLine(Math.Round(percent, 1)); } }92.9292929292929 92 93 92.9
The percentage sign in the C# language has a use as the modulo operator. This forms an expression that will return the remainder of a division of the 2 operands.
First we saw how to format ratios as percentages with 3 different methods. Second, we saw how to get a percentage value directly with math, and then round it.