我想使用javascript解析以下字符串:-3.755512109246D2
。请注意,此格式使用D
作为指数指示符,而不是通常的e
或E
。
parseFloat("-3.755512109246D2")
将忽略最后一部分(D2
(并返回-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。