JS | Parse Float

by Zoltan Boros

HTML

<pre id="out"></pre>

JavaScript

var outElement = document.getElementById("out");
function print(string)
{
    outElement.innerHTML += string + "\n";
}

function parseFloatStrictly(x)
{
    if (isNaN(x)) {
        throw "'" + x + "' is not a real number.";
    }
    if (typeof x === "number") {
        return x;
    }
    if (typeof x === "string" || x instanceof String) {
        x = x.trim();
        if (x == "") {
            throw "'" + x + "' is not a real number.";
        }
        var result = x * 1;
        if (isNaN(result)) {
            throw "'" + x + "' is not a real number.";
        }
        return result;
    }
    throw "'" + x + "' is not a real number.";
}

var items = [
    { value : false, isFloat : false },
    { value : true,  isFloat : false },
    { value : 12,    isFloat : true },
    { value : -14,   isFloat : true },
    { value : +15,   isFloat : true },
    { value : 0,     isFloat : true },
    { value : 2.3,   isFloat : true },
    { value : "34",  isFloat : true },
    { value : "12.34",  isFloat : true },
    { value : "12,34",  isFloat : false },
    { value : "12.34a",  isFloat : false },
    { value : "",    isFloat : false },
    { value : "NaN", isFloat : false },
    { value : NaN,   isFloat : false },
    { value : "a",   isFloat : false }
];

for (var i in items) {
    var value = items[i].value;
    var isFloat = items[i].isFloat;
    var valueAsFloat, verdict;
    try {
        valueAsFloat = parseFloatStrictly(value);
        verdict = isFloat;
    } catch (ex) {
        valueAsFloat = "n.a.";
        verdict = !isFloat;
    }
    print("'" + value + "' (" + typeof value + ") as float: " + valueAsFloat + " (" + (verdict ? "ok" : "NOK") + ")");
}