parseFloat NaN问题

时间:2014-02-17 02:13:36

标签: javascript

我在JavaScript中有一个变量,它持有英镑货币,就像

var a = £250

250英镑的价值是这样的,它没有直接来自a。就像是 var a = $(“#spanid”)。text();

现在我正在使用像这样的string.split方法拆分此变量

var b = a.split('£');

当我用alert(b[1])检查时,我得到的值为250,这是正确的。

但现在我这样做了

var c = parseFloat(b[1]). 

我将C的值设为NaN。我已经尝试了很多东西,但我一直得到NaN的价值,有人可以帮忙吗?

由于

3 个答案:

答案 0 :(得分:1)

使用带有类型转换的正则表达式和三元语句从字符串a获取数字磅值。即使在之前或之后存在其他字符,此解决方案也将用于获取字符串中提到的第一个货币值。结果也保证是一个数字,因此在算术计算中立即使用它是安全的。

/* the first line is assumed */
var a = "£250";

var pounds = a.match(/[-.\d]+/g);
/* match possible parts of a pound */

pounds = pounds ? pounds[0] - 0 || 0 : 0;
/* convert match to an actual number type or else 0 if
 * no match is obtained or the match is not valid */

在某些情况下,知道有效数字不存在而不是假设为零可能很重要。如果您希望从不正确形成的数字(如减号,小数点和数字的随机混合)中收到null匹配或可能的NaN结果,那么您可以将最后一个语句替换为:< / p>

pounds = pounds ? pounds[0] - 0 : pounds;

注意:上面的正则表达式不应用于从字符串中提取常规数字或验证字符串中的任意数字。它仅适用于非常简单的货币数字。

顺便说一句,我提供了一个出色的正则表达式,用于在几个月前从字符串中提取一般数字。我打算在这里链接到它以供参考,但显然我在里面回答它的问题已被删除(可能是一个重复的问题所以在我回答之后,问题被删除了,经常发生)。如何查找已删除问题的答案?

答案 1 :(得分:0)

您的变量为a而不是string

var a = '£250';
var b = a.split('£');
var c = parseFloat(b[1]);
alert(c);

更新:OP已被编辑...尽管字符串仍然没有引号...

答案 2 :(得分:0)

你需要:

var a = '£250',
    b = a.split('£'),
    c = parseFloat(b[1]);
alert(c);

a是一个字符串,因此您需要将其值包含在' '内以及使用a.split而不是string.split,因为您已将变量名称定义为{{ 1}}。

<强> Fiddle Demo