2012-01-27 48 views
4

我有下面的语句动作脚本字符串编号

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

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

所以,我为什么作为第一个语句不给出正确的结果有点糊涂了问题?

+0

在构造函数中传递的对象应直接表示一个双精度浮点数。 – abhinav 2012-01-27 08:40:40

回答

12

它可能预期的价值已经是一个数字,而不是一个计算。试着解析这个字符串:"1+2"。它最有可能导致NaN。


编辑:我运行一个测试

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

所以,正如我说的,​​构造函数需要一个数字,而不是计算。

-1

通过将值包含在引号内,您将使其成为显式字符串。 这就像问“单词”的数字值是什么。

不知道这是否有帮助,但删除引号,它是有道理的。

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

该声明由用户输入,因此我无法删除该报价。任何其他方式来解决这个问题? – 2012-01-27 09:13:51

+0

您的输入始终是相同的格式?即一小部分?是这样,你可以解析字符串,在/之前获得字符,然后在这些子字符串上执行计算。例如var str:String =“1”; var str2:String =“2”; trace(Number(str)/ Number(str2)); // output 0.5 – crooksy88 2012-01-27 11:10:55

1

您可以使用Number()将由数字字符组成的字符串转换为实际Number数据。它的工作方式是将String值传递给Number(),然后这将创建传递给它的String的Number版本。

trace(Number("1")/Number("2"));  // Output 0.5 

NaN的是因为你想用作数字数据转换字符串数据输出。

你必须这样追踪,因为“/”运算符不是一个数字。 你只能乘以或分开数字,而不能是字符串。因此,在试图分割字符串数据的行为中,我们隐含地强制将值更改为数字数据。我们不能那样做。我们应该先将String数据显式转换为Number数据,然后再执行算术运算。

+0

你的解释对数字是正确的,但a)'Number()'不是一个构造函数,而是一个顶层转换函数http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3 /package.html#Number(),和b)使用'parseFloat()'或'parseInt()'将字符串转换为数字值更安全更准确(解析字符串直到第一个非数字字符,总是返回NaN,如果该字符串不能被转换 - 检查表中Number()的可能的返回值以查看我的意思)。 – weltraumpirat 2012-01-27 10:29:32

+0

@weltraumpirat:thanx纠正我。我修改了我的答案,因为Number()不是构造函数。 – 2012-01-27 10:53:59