diff --git a/Libraries/LibJS/Runtime/Value.cpp b/Libraries/LibJS/Runtime/Value.cpp index 2c94a253ddf..78c42dee5d7 100644 --- a/Libraries/LibJS/Runtime/Value.cpp +++ b/Libraries/LibJS/Runtime/Value.cpp @@ -173,13 +173,11 @@ Value Value::to_number() const return js_infinity(); if (string == "-Infinity") return js_negative_infinity(); - bool ok; - //FIXME: Parse in a better way - auto parsed_int = string.to_int(ok); - if (ok) - return Value(parsed_int); - - return js_nan(); + char* endptr; + auto parsed_double = strtod(string.characters(), &endptr); + if (*endptr) + return js_nan(); + return Value(parsed_double); } case Type::Object: return m_value.as_object->to_primitive(Object::PreferredType::Number).to_number(); diff --git a/Libraries/LibJS/Tests/to-number-basic.js b/Libraries/LibJS/Tests/to-number-basic.js index 902ad293f2b..9a447fae321 100644 --- a/Libraries/LibJS/Tests/to-number-basic.js +++ b/Libraries/LibJS/Tests/to-number-basic.js @@ -27,9 +27,8 @@ try { assert(-42 === -42); assert(+1.23 === 1.23); assert(-1.23 === -1.23); - // FIXME: returns NaN - // assert(+"1.23" === 1.23) - // assert(-"1.23" === -1.23) + assert(+"1.23" === 1.23) + assert(-"1.23" === -1.23) assert(+"Infinity" === Infinity); assert(+"+Infinity" === Infinity); assert(+"-Infinity" === -Infinity);