Make sure numerical settings parsing uses InvariantCulture

This commit is contained in:
Stone_Red
2026-10-06 23:15:11 +02:00
parent 839ffdaaf3
commit a5e56961b6
2 changed files with 17 additions and 4 deletions
@@ -1,4 +1,5 @@
using System;
using System.Globalization;
namespace DesktopMagic.Api.Settings;
@@ -64,12 +65,17 @@ public class IntegerUpDown : Setting
internal override string GetJsonValue()
{
return Value.ToString();
return Value.ToString(CultureInfo.InvariantCulture);
}
internal override void SetJsonValue(string value)
{
_ = int.TryParse(value, out int result);
// Values saved by older versions use the current culture (e.g. a culture specific minus sign), so fall back to it.
if (!int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out int result))
{
_ = int.TryParse(value, NumberStyles.Integer, CultureInfo.CurrentCulture, out result);
}
Value = result;
}
}
+9 -2
View File
@@ -1,5 +1,6 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
namespace DesktopMagic.Api.Settings;
@@ -65,12 +66,18 @@ public sealed class Slider : Setting
internal override string GetJsonValue()
{
return Value.ToString();
return Value.ToString(CultureInfo.InvariantCulture);
}
internal override void SetJsonValue(string value)
{
_ = double.TryParse(value, out double result);
// Values saved by older versions use the current culture (e.g. "30,5"), so fall back to it.
// Thousands separators are not allowed, otherwise "30,5" would be read as 305 by the invariant culture.
if (!double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out double result))
{
_ = double.TryParse(value, NumberStyles.Float, CultureInfo.CurrentCulture, out result);
}
Value = result;
}
}