Aber mal einen Number- und mal einen String-Wert.
Hm. Stimmt. Ich habe nicht bedacht, dass isNaN('123456') eben auch false liefert, weil der String '123456' als Zahl angesehen wird.
Die beiden Zeilen return s; durch return floatval( s ); zu ersetzen sollte genügen.