diff --git a/src/Avalonia.Base/Utilities/MathUtilities.cs b/src/Avalonia.Base/Utilities/MathUtilities.cs index 8590c16a07..6542bc8a89 100644 --- a/src/Avalonia.Base/Utilities/MathUtilities.cs +++ b/src/Avalonia.Base/Utilities/MathUtilities.cs @@ -221,7 +221,7 @@ namespace Avalonia.Utilities double newValue; // If DPI == 1, don't use DPI-aware rounding. - if (!MathUtilities.AreClose(dpiScale, 1.0)) + if (!MathUtilities.IsOne(dpiScale)) { newValue = Math.Round(value * dpiScale) / dpiScale; // If rounding produces a value unacceptable to layout (NaN, Infinity or MaxValue), use the original value. diff --git a/tests/Avalonia.Base.UnitTests/Utilities/MathUtilitiesTests.cs b/tests/Avalonia.Base.UnitTests/Utilities/MathUtilitiesTests.cs index 61f7a2a548..be1aa9ad2e 100644 --- a/tests/Avalonia.Base.UnitTests/Utilities/MathUtilitiesTests.cs +++ b/tests/Avalonia.Base.UnitTests/Utilities/MathUtilitiesTests.cs @@ -157,5 +157,24 @@ namespace Avalonia.Base.UnitTests.Utilities var actual = MathUtilities.GreaterThanOrClose(1, 1); Assert.True(actual); } + + [Fact] + public void Round_Layout_Value_Without_DPI_Aware() + { + const double value = 5e-15; + var expectedValue = Math.Round(value); + var actualValue = MathUtilities.RoundLayoutValue(value, 1.0); + Assert.Equal(expectedValue, actualValue); + } + + [Fact] + public void Round_Layout_Value_With_DPI_Aware() + { + const double dpiScale = 1.25; + const double value = 42.5; + var expectedValue = Math.Round(value * dpiScale) / dpiScale; + var actualValue = MathUtilities.RoundLayoutValue(value, dpiScale); + Assert.Equal(expectedValue, actualValue); + } } }