Попробуйте эту реализацию parseFloat, которая принимает основание в качестве второго аргумента.
const parseFloat = function parseFloat (string, radix = 10) {
if (radix == 10) {
return this(string)
}
string = String(string);
const [iString, fString = '0'] = string.split('.')
const iNumber = parseInt(iString, radix)
const fNumber = parseInt(fString, radix)
const fLength = Math.max(fNumber.toString(radix).length, fString.length)
const sign = Infinity / iNumber === Infinity ? 1 : -1
return iNumber + sign * fNumber / radix ** fLength
}.bind(parseFloat)
Использование:
parseFloat(0.10010011, 2); // 0.57421875