Action Script 字符串转数字

4

我对以下语句有问题

trace(Number("1/2")) //output NaN

但是
trace(Number("1.2")) //output 1.2

所以,我有点困惑为什么第一条语句不能给出正确的结果?

构造函数中传递的对象应直接表示双精度浮点数。 - abhinav
3个回答

12

它可能期望值已经是一个数字,而不是一个计算结果。尝试解析这个字符串:"1+2"。它很可能也会得到NaN。


编辑:我已经运行了一个测试

Number("1.2") = 1.2
Number("1+2") = NaN
Number("1/2") = NaN

就像我说的那样,Number() 构造函数需要一个数字作为参数,而不是一个计算表达式。


1
你可以使用Number()将由数字字符组成的字符串转换为实际的数字数据。它的工作原理是将String值传递给Number(),然后它会创建一个该String的数字版本。
    trace(Number("1")/Number("2"));     // Output 0.5

NaN是输出结果,因为您正在尝试将字符串数据转换为数字数据进行使用。

您必须这样跟踪,因为“/”运算符不是一个数字。您只能将数字相乘或相除,不能是字符串。因此,在尝试分割字符串数据时,我们在隐式强制值更改为数字数据。我们不能这样做。我们应该先显式地将字符串数据转换为数字数据,然后执行算术运算。


你的关于数字的解释是正确的,但是 a) Number() 不是一个构造函数,而是一个顶级转换函数,http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package.html#Number(),b) 使用 parseFloat()parseInt() 将字符串转换为数值更安全和准确(解析字符串直到第一个非数字字符,并且如果字符串不能被转换,则始终返回 NaN,请查看 Number() 可能返回值的表格以了解我的意思)。 - weltraumpirat
@weltraumpirat:谢谢你纠正我。我已经修改了我的答案,因为Number()不是一个构造函数。 - Swati Singh

-1

通过将值放在引号中,您使其成为显式字符串。这就像询问单词“this”的数字值是多少。

不确定这是否有帮助,但去掉引号它就有意义了。

trace(Number(1/2)); //output 0.5

该语句是由用户输入的,因此我无法删除引号。还有其他解决方法吗? - sameer jain
你的输入格式总是一样的吗?例如一个分数?如果是这样,你可以解析字符串,获取“/”之前和之后的字符,然后对这些子字符串进行计算。例如:var str:String = "1"; var str2:String = "2";trace(Number(str) / Number(str2)); //输出0.5 - crooksy88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接