PHP
реализует float как IEEE 754 платформозависимого формата.
То есть в большинстве случаев есть 53 бита мантиссы, что где-то 14-16 значащих десятичных цифр (надо перечитывать стандарт, там ещё nan, infinite кодируется, не очень помню сколько бит непосредственно значение и в каких случаях). Просить из этого достать 20 цифр конечно можно и любой результат с одинаковыми первыми 53 битами будет абсолютно корректен. Потому что float by design приблизительное число.