Forráskód Böngészése

LibJS: Make string to number coercion work for doubles

Linus Groh 5 éve
szülő
commit
0c14ee035c

+ 5 - 7
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();

+ 2 - 3
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);