Mpdreamz / shellprogressbar

ShellProgressBar - display progress in your console application
MIT License
1.43k stars 134 forks source link

Fix Percentage property floating point issues #110

Open OneYellowLemon opened 3 months ago

OneYellowLemon commented 3 months ago

Hello!

Sometimes, depending on the values of MaxTicks and CurrentTick, progress bars fails to complete due to floating point arithmetic issues.

Here is a screenshot from my debugger where the Percentage property should be 100, but is slightly off. This PR aims to fix that. image

Code to reproduce:

const int max = 369;

ProgressBar progress = new ProgressBar(max, "test", new ProgressBarOptions
{
    ProgressBarOnBottom = true,
    BackgroundColor = ConsoleColor.DarkGray
});

for (int i = 0; i < max; i++)
{
    progress.Tick();
    Thread.Sleep(1);
}

Console.WriteLine($"Progress bar Percentage: {progress.Percentage}");
Console.WriteLine($"Progress bar CurrentTick and MaxTicks: {progress.CurrentTick} / {progress.MaxTicks}");

Tested with ShellProgressBar 5.2.0 and .NET 8.0.200.