Refined precision detection

The diff looks big because I renamed variables, made stuff private and reduced code duplication.

The main change is: The precision detection stops at a certain precision. Now there is a lower boundary, given by a maximum number of decimal places (after the comma). 8 for floats, 4 for DM/DMS (plus 2 places for the minutes and 2 for the seconds is also 8).
* 0.00000001° is approx. 1 mm.
* 1 / 36000000° is approx. 3 mm.

Reason for all this is IEEE. Some combinations of degrees and minutes turn into numbers like 1.20000000000001 and cause the detectors to return way to high precisions.

[Bug: 64820](https://bugzilla.wikimedia.org/show_bug.cgi?id=64820)