Index: /trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java	(revision 16770)
+++ /trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java	(revision 16771)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.data.osm.Tagged;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.UserCancelException;
 
@@ -202,16 +203,34 @@
 
     /**
-     * Inverts sign of a numeric value.
+     * Inverts sign of a numeric value and converts decimal number to use decimal point.
+     * Also removes sign from null value.
      * @param value numeric value
      * @return opposite numeric value
      */
     public static String invertNumber(String value) {
-        Pattern pattern = Pattern.compile("^([+-]?)(\\d.*)$", Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile("^([+-]?)(\\d*[,.]?\\d*)(.*)$", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(value);
         if (!matcher.matches()) return value;
         String sign = matcher.group(1);
-        String rest = matcher.group(2);
+        String number = matcher.group(2);
+        String symbol = matcher.group(3);
         sign = "-".equals(sign) ? "" : "-";
-        return sign + rest;
+
+        if (!number.isEmpty()) {
+            String fixedNum = number.replace(",", ".");
+            try {
+                double parsed = Double.parseDouble(fixedNum);
+                if (parsed != 0) {
+                    return sign + fixedNum + symbol;
+                } else {
+                    return fixedNum + symbol;
+                }
+            } catch (NumberFormatException e) {
+                Logging.trace(e);
+                return value;
+            }
+        }
+
+        return value;
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrectorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrectorTest.java	(revision 16770)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrectorTest.java	(revision 16771)
@@ -59,4 +59,9 @@
             assertSwitch(new Tag(k, "something"), new Tag(k, "something"));
         }
+        // numbered incline (see #19508)
+        assertSwitch(new Tag("incline", "+0%"), new Tag("incline", "0%"));
+        assertSwitch(new Tag("incline", ".1%"), new Tag("incline", "-.1%"));
+        assertSwitch(new Tag("incline", "-10.0%"), new Tag("incline", "10.0%"));
+        assertSwitch(new Tag("incline", "0,6°"), new Tag("incline", "-0.6°"));
         // direction=forward/backward/...
         assertSwitch(new Tag("direction", "forward"), new Tag("direction", "backward"));
@@ -100,5 +105,5 @@
 
     private void assertSwitch(Tag oldTag, Tag newTag) {
-        Assert.assertEquals(ReverseWayTagCorrector.TagSwitcher.apply(oldTag), newTag);
+        Assert.assertEquals(newTag, ReverseWayTagCorrector.TagSwitcher.apply(oldTag));
     }
 
