From 406ec6e92d853dcf6d87a853cf9a21f70355a599 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 7 Feb 2018 13:26:17 +0900 Subject: [PATCH] Make OsuSliderBar always use number of digits from precision --- osu.Game/Graphics/UserInterface/OsuSliderBar.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/osu.Game/Graphics/UserInterface/OsuSliderBar.cs b/osu.Game/Graphics/UserInterface/OsuSliderBar.cs index 3c3939586e..f9d552042b 100644 --- a/osu.Game/Graphics/UserInterface/OsuSliderBar.cs +++ b/osu.Game/Graphics/UserInterface/OsuSliderBar.cs @@ -35,6 +35,7 @@ namespace osu.Game.Graphics.UserInterface var bindableDouble = CurrentNumber as BindableNumber; var bindableFloat = CurrentNumber as BindableNumber; var floatValue = bindableDouble?.Value ?? bindableFloat?.Value; + var floatPrecision = bindableDouble?.Precision ?? bindableFloat?.Precision; if (floatValue != null) { @@ -44,7 +45,11 @@ namespace osu.Game.Graphics.UserInterface if (floatMaxValue == 1 && (floatMinValue == 0 || floatMinValue == -1)) return floatValue.Value.ToString("P0"); - return floatValue.Value.ToString("N1"); + // We don't really care about more than 5 decimal digits + var decimalPrecision = normalize(Math.Round((decimal)floatPrecision, 5)); + var precisionDigits = (decimal.GetBits(decimalPrecision)[3] >> 16) & 255; + + return floatValue.Value.ToString($"N{precisionDigits}"); } var bindableInt = CurrentNumber as BindableNumber; @@ -52,6 +57,8 @@ namespace osu.Game.Graphics.UserInterface return bindableInt.Value.ToString("N0"); return Current.Value.ToString(CultureInfo.InvariantCulture); + + decimal normalize(decimal d) => decimal.Parse(d.ToString("0.############################", CultureInfo.InvariantCulture), CultureInfo.InvariantCulture); } }