0.10 != 0.1, in the same way that 0.8 != 0.80
This should be fairly clear given your typical version number takes the form of <integer>.<integer>.<integer> which can't possibly be mistaken for a decimal fraction.
With letters, short hashes or even whole words thrown in.
Dots separate logical numberings, like version, patch, bugfix, etc. So 3.0 goes after 2.0 And 2.0.2 after 2.0.1. And 1.10 after 1.9.
the version number is a tuple, not a decimal, encoded with dots as field separators.
0.10 is an encoding for (0, 10). So 0.10 > 0.9, and 3.7.4a makes perfect sense.
edit: furthermore version number ordering has additional complexity: 3.7.4a < 3.7.4