In the case of Infiltration's version number, which is #.# the first number (before the dot) represents the major release version, and the second number (after the dot) represents the minor release number. In the case of Infiltration 2.9 it means it is at fairly much the end-of-life of its second major release, as in 2nd major release and not exacty 9th version of the 2nd release but in this case sorta 9 out of a scale of 10 finished the 2nd release...errr, but dont quote me on this, its late and I might be talking jiberish. Anyways, its also common to incude two more sets of numbers after the major/minor release numbers, these are major and minor revision numbers, and these are usually associated to patched releases (take a look at kernel.org and the linux kernel version numbers as they are a good example of about every type of version identifier thrown into a name). However, major/minor release and revision numbers are not the only type of version numbers used, some developers like to use a date code instead of a version number, like 20060506 if they released something today. Now I just realized I may have getting a little sidetracked...To answer your other question about who/what determines the version, quite honestly that is completely up to the developer in the end, he could create the version number for his release by the number of zits on his face or the number of hairs on his head, but the most common version systems that I see are the major/minor system and the timestamp version meantioned before.
Hope that answers your question, if not hopefully someone more fitting can answer it.