Это связано с количеством цифр точности в двух различных типах с плавающей запятой, которые вы используете, и с тем фактом, что многие числа не могут быть представлены точно, независимо от точности. (С чисто математической стороны: иррациональные числа превосходят число рациональных)
Взять, например, 2/3. Он не может быть представлен точно в десятичном виде. С 4 значащими цифрами он будет представлен как 0,6667. С 8 значащими цифрами это будет 0,66666667.
Трейлинг 7 является сводкой, отражающей, что следующая цифра будет> 5, если есть место для ее хранения.
0,6667 больше, чем 0,66666667, поэтому компьютер оценит 2/3 (4 цифры)> 2/3 (8 цифр).
То же самое верно для ваших .7 против .70 в двойных и расширенных переменных.
Чтобы избежать этой конкретной проблемы, попробуйте использовать один и тот же числовой тип в коде. При работе с числами с плавающей запятой в общем, есть много мелких вещей, которые вы должны остерегаться. Самое главное - не писать свой код, чтобы сравнить два числа с плавающей точкой на равенство - даже если они должны иметь одинаковое значение, в вычислениях есть много факторов, которые могут привести к тому, что они окажутся совсем немного иначе. Вместо сравнения на равенство нужно проверить, что разница между двумя числами очень мала. Насколько малой должна быть разница, зависит от вас и характера ваших вычислений, и обычно оно называется эпсилоном, взятым из теоремы и доказательства исчисления.