浏览代码

LibJS: Make string to number coercion work for doubles

Linus Groh 5 年之前
父节点
当前提交
0c14ee035c
共有 2 个文件被更改,包括 7 次插入10 次删除
  1. 5 7
      Libraries/LibJS/Runtime/Value.cpp
  2. 2 3
      Libraries/LibJS/Tests/to-number-basic.js

+ 5 - 7
Libraries/LibJS/Runtime/Value.cpp

@@ -173,13 +173,11 @@ Value Value::to_number() const
             return js_infinity();
             return js_infinity();
         if (string == "-Infinity")
         if (string == "-Infinity")
             return js_negative_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:
     case Type::Object:
         return m_value.as_object->to_primitive(Object::PreferredType::Number).to_number();
         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(-42 === -42);
     assert(+1.23 === 1.23);
     assert(+1.23 === 1.23);
     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);
     assert(+"+Infinity" === Infinity);
     assert(+"-Infinity" === -Infinity);
     assert(+"-Infinity" === -Infinity);