Как отметил Джоэл Коухорн, 1.2 - это повторяющаяся дробь 1.0011 0011 0011 ... в двоичном формате и не может быть точно представлена в конечном количестве битов.
Самое близкое, что вы можете получить с IEEE 754 float
, это 1.2000000476837158203125. Самое близкое, что вы можете получить с double
, это 1.1999999999999999555910790149937383830547332763671875. Я не знаю, откуда вы получаете 1.199999998.
Плавающая точка была разработана для представления приблизительных величин: физических измерений (плавательный бассейн никогда не бывает точно 1,2 метра глубиной) или иррациональных функций, таких как sqrt
, log
или sin
. Если вам нужно значение с точностью до 15 значащих цифр, оно работает нормально. Если вам действительно нужно точное значение, не так уж и много.
Для номера версии более подходящим представлением будет пара целых чисел: одно для основной версии и одно для вспомогательной версии. Это также правильно обрабатывает последовательность 1.0, 1.1, ..., 1.9, 1.10, 1.11, которая неправильно сортирует в столбце REAL
.