> If I use Float("17") it returns 17.0 and Float(0x11) returns 17.0, both as
> expected.

Yes, because Kernel.Float knows how to convert string "17" to float
and number 17
written as 0x11 to float.

>  Why doesn't Float("0x11") work?

You answer that yourself. Unlike Kernel.Integer, Kernel.Float does not honor
radix indicators (0, 0b, 0x), thus string '0x11' is invalid for that method.
While '0x11'.to_f also does not know how to deal with this, it
silently returns 0.0.
Kernel.Float is different in that way, that it rises an exception when
given string is invalid.

> As Ruby doesn't appear to handle
> Floats of bases other than 10 (or at least I haven't figured out how to yet)
> I can see it choking on Float("0x11.34") but it shouldn't choke on
> Float("0x11").

It should. Because this method does not know anything about 0x prefix
the whole string is invalid
to it.
Kernel.Integer KNOWS how to deal with prefixes, so it handles ocatal,
binary and hex representations
in string format just fine.
<...>

Regards,
Rimantas
--
http://rimantas.com/