Index: /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java	(revision 15841)
+++ /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java	(revision 15842)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.autofilter;
 
+import java.text.DecimalFormat;
 import java.util.Arrays;
 import java.util.Objects;
@@ -122,6 +123,6 @@
                 Matcher m = p.matcher(v);
                 if (m.matches()) {
-                    int a = Integer.parseInt(m.group(1));
-                    int b = Integer.parseInt(m.group(2));
+                    int a = valueExtractor.applyAsInt(m.group(1));
+                    int b = valueExtractor.applyAsInt(m.group(2));
                     return IntStream.rangeClosed(Math.min(a, b), Math.max(a, b));
                 } else {
@@ -144,5 +145,8 @@
     public static AutoFilterRule[] defaultRules() {
         return new AutoFilterRule[]{
-            new AutoFilterRule("level", 17),
+            new AutoFilterRule("level", 17)
+                // #17109, support values like 0.5 or 1.5 - level values are multiplied by 2 when parsing, values are divided by 2 for formatting
+                .setValueExtractor(s -> (int) (Double.parseDouble(s) * 2.))
+                .setValueFormatter(v -> DecimalFormat.getInstance().format(v / 2.)),
             new AutoFilterRule("layer", 16)
                     .setDefaultValueSupplier(AutoFilterRule::defaultLayer),
Index: /trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterRuleTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterRuleTest.java	(revision 15841)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterRuleTest.java	(revision 15842)
@@ -25,5 +25,5 @@
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
+    public JOSMTestRules test = new JOSMTestRules().i18n();
 
     /**
@@ -32,12 +32,14 @@
     @Test
     public void testTagValuesForPrimitive() {
+        // #17109, support values like 0.5 or 1.5 - level values are multiplied by 2 when parsing, values are divided by 2 for formatting
         final AutoFilterRule level = AutoFilterRule.getDefaultRule("level").orElseThrow(NoSuchElementException::new);
-        assertTagValuesForPrimitive(level, "way level=-4--5", -5, -4);
-        assertTagValuesForPrimitive(level, "way level=-2", -2);
+        assertTagValuesForPrimitive(level, "way level=-4--5", -10, -9, -8);
+        assertTagValuesForPrimitive(level, "way level=-2", -4);
         assertTagValuesForPrimitive(level, "node level=0", 0);
-        assertTagValuesForPrimitive(level, "way level=1", 1);
-        assertTagValuesForPrimitive(level, "way level=2;3", 2, 3);
-        assertTagValuesForPrimitive(level, "way level=6-9", 6, 7, 8, 9);
-        assertTagValuesForPrimitive(level, "way level=10;12-13", 10, 12, 13);
+        assertTagValuesForPrimitive(level, "way level=1", 2);
+        assertTagValuesForPrimitive(level, "way level=2;3", 4, 6);
+        assertTagValuesForPrimitive(level, "way level=6-9", 12, 13, 14, 15, 16, 17, 18);
+        assertTagValuesForPrimitive(level, "way level=10;12-13", 20, 24, 25, 26);
+        assertTagValuesForPrimitive(level, "way level=0;0.5;1;1.5;2;2.5;3", 0, 1, 2, 3, 4, 5, 6);
     }
 
