2012-01-27 53 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