diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 75dc8f4b4bf5ed9ed43ab8f85f410427f3f54a30..958c4e017ff0a44ac6f2682c509c1690bbb261ef 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -93,8 +93,10 @@ bool GcodeSuite::get_target_extruder_from_command() {
*/
void GcodeSuite::get_destination_from_command() {
LOOP_XYZE(i) {
- if (parser.seen(axis_codes[i]))
- destination[i] = LOGICAL_TO_NATIVE(parser.value_axis_units((AxisEnum)i) + (axis_relative_modes[i] || relative_mode ? current_position[i] : 0), i);
+ if (parser.seen(axis_codes[i])) {
+ const float v = parser.value_axis_units((AxisEnum)i) + (axis_relative_modes[i] || relative_mode ? current_position[i] : 0);
+ destination[i] = i == E_AXIS ? v : LOGICAL_TO_NATIVE(v, i);
+ }
else
destination[i] = current_position[i];
}