Improved output distribution of RoundToLevels (#25026)
* Improved output distribution of RoundToLevels * Updated tests * Oops
This commit is contained in:
@@ -35,27 +35,7 @@
|
||||
}
|
||||
|
||||
var toOne = actual / max;
|
||||
double threshold;
|
||||
if (levels % 2 == 0)
|
||||
{
|
||||
// Basically, if we have an even count of levels, there's no exact "mid point".
|
||||
// Thus, I nominate the first one below the 50% mark.
|
||||
threshold = ((levels / 2f) - 1) / (levels - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
threshold = 0.5f;
|
||||
}
|
||||
|
||||
var preround = toOne * (levels - 1);
|
||||
if (toOne < threshold || levels <= 2)
|
||||
{
|
||||
return (int) Math.Ceiling(preround);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (int) Math.Floor(preround);
|
||||
}
|
||||
return (int) Math.Ceiling(toOne * (levels - 2));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -18,15 +18,15 @@ namespace Content.Tests.Shared.Utility
|
||||
(0.01f, 10, 5, 1),
|
||||
(1, 10, 5, 1),
|
||||
(2, 10, 5, 1),
|
||||
(2.5f, 10, 5, 1),
|
||||
(2.51f, 10, 5, 2),
|
||||
(3, 10, 5, 2),
|
||||
(3, 10, 5, 1),
|
||||
(3.33f, 10, 5, 1),
|
||||
(3.34f, 10, 5, 2),
|
||||
(4, 10, 5, 2),
|
||||
(5, 10, 5, 2),
|
||||
(6, 10, 5, 2),
|
||||
(7, 10, 5, 2),
|
||||
(7.49f, 10, 5, 2),
|
||||
(7.5f, 10, 5, 3),
|
||||
(6.66f, 10, 5, 2),
|
||||
(6.67f, 10, 5, 3),
|
||||
(7, 10, 5, 3),
|
||||
(8, 10, 5, 3),
|
||||
(9, 10, 5, 3),
|
||||
(10, 10, 5, 4),
|
||||
|
||||
Reference in New Issue
Block a user