Javascript 具有不同 ExponentIndicator 的 parseFloat
Javascript parseFloat with different ExponentIndicator
我想解析以下字符串:-3.755512109246D2
使用 javascript。
请注意,此格式使用 D
作为指数指示符,而不是通常的 e
或 E
.
parseFloat("-3.755512109246D2")
将忽略最后一部分 (D2
) 和 return -3.755512109246
.
阅读规范我看到只有 e
和 E
被用作 ExponentIndicator 并且从快速搜索看来这些核心功能实际上是用 C++ 编写的。
我在这里有什么选择?考虑到我正在解析包含不同格式数字的大文件,有时它们会有一个指数,该指数可以是 e
、E
、d
和 D
.
如果我唯一的方法是重写 parseFloat
那么现在它以与 E
相同的方式对待 D
和 d
什么是有效的实现?
我的第一个赌注是这样的:
var str ="-3.755512109246D2";
for(var i = 0; i < str.length; i++)
{
if(str[i] == 'd' || str[i] == 'D')
{
str[i] = 'E';
break;
}
}
var result = parseFloat(str);
有没有更好的方法?
您可以使用带有正则表达式的 replace
将 d
或 D
替换为 e
,然后 Number
而不是 parseFloat
以确保整个字符串被解释为一个数字,而不是仅仅在第一个无效部分被截断:
var result = Number(str.replace(/d/i, "e"));
/d/i
匹配第一个“d” ASCII-case-insensitively.
我想解析以下字符串:-3.755512109246D2
使用 javascript。
请注意,此格式使用 D
作为指数指示符,而不是通常的 e
或 E
.
parseFloat("-3.755512109246D2")
将忽略最后一部分 (D2
) 和 return -3.755512109246
.
阅读规范我看到只有 e
和 E
被用作 ExponentIndicator 并且从快速搜索看来这些核心功能实际上是用 C++ 编写的。
我在这里有什么选择?考虑到我正在解析包含不同格式数字的大文件,有时它们会有一个指数,该指数可以是 e
、E
、d
和 D
.
如果我唯一的方法是重写 parseFloat
那么现在它以与 E
相同的方式对待 D
和 d
什么是有效的实现?
我的第一个赌注是这样的:
var str ="-3.755512109246D2";
for(var i = 0; i < str.length; i++)
{
if(str[i] == 'd' || str[i] == 'D')
{
str[i] = 'E';
break;
}
}
var result = parseFloat(str);
有没有更好的方法?
您可以使用带有正则表达式的 replace
将 d
或 D
替换为 e
,然后 Number
而不是 parseFloat
以确保整个字符串被解释为一个数字,而不是仅仅在第一个无效部分被截断:
var result = Number(str.replace(/d/i, "e"));
/d/i
匹配第一个“d” ASCII-case-insensitively.