解析表示浮点数组的字符串

时间:2016-05-27 08:46:47

标签: javascript parsing floating-point

我有一个字符串:

string = "[x,y,z]"

其中xyz是有效的javascript浮动字符串。一些例子:

-0.9999
1.
1.00000000000E-5
-1E5

将此字符串解析为浮动的实际javascript数组而不使用Eval 的最有效(最快)方法是什么?

现在我这样做:

parseFloatArray = function(string){
    // isolate string by removing square brackets
    string = string.substr( 1, string.length-2 )

    // create array with string split
    var array = string.split(',');

    // parse each element in array to a float
    for (var i = 0, il = array.length; i < il; i++){
        array[i] = parseFloat(array[i]);
    }

    // return the result
    return array
}

对于上述示例,解决方案正常工作非常重要。

我还尝试使用JSON.parse,这看起来很完美,但它会为第二个示例1.返回 SyntaxError ,其中小数点分隔符后面没有任何内容。

我准备 a fiddle 进行测试。

5 个答案:

答案 0 :(得分:2)

而不是这个

array[i] = parseFloat(array[i]);

试   array[i] = +array[i];

上面很好地处理了所有测试用例。

这是工作fiddle

答案 1 :(得分:1)

试试这个:

str = "[-0.9999, 1., 1.00000000000E-5,-1E5]";
str.slice(1, str.length-1).split(',').map(Number);
// [-0.9999, 1, 0.00001, -100000]

答案 2 :(得分:0)

parseFloat的基本语法是parseFloat(string)。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

如果您认为输入值只是数字,则可以使用Number(x)而不是parseFloat。

此外,在解析时可能会得到不同的值,因为所有浮点数学都基于IEEE [754]标准。所以使用toPrecision()方法来自定义你的值 - https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Number/toPrecision

答案 3 :(得分:0)

您可以随时使用内置于array.prototypes中的javascript,而不是编写for循环。

var string = "[1.,-0.9999,-1.00000E-5]";
var array = string.substr( 1, string.length-2 ).split(',');

console.log(array.map(function(i){return parseFloat(i);}));

您也可以使用一元运算符代替parseFloat()。

console.log(array.map(function(i){return +i;}));

答案 4 :(得分:-1)

提取效率最高的是替换和分裂。

var str = "[312.413,436.6546,34.1]"; // string

str = () => str.replace(/\[|\]/g, "").split(","); //[312.413, 4...] Array

最有效的解析就是在带有“+”的字符串之前,这将使其数字化,并且由于javascript使用浮点数作为基元(而不是整数),它们将被自动解析。

var a = "1.00000000000E-5";
console.log( +a ); // 0.00001