2009-10-20 32 views
0

我正在研究一個讀取用戶輸入爲字符串的程序,其中包括讀取某些數字和運算符。如何將一個數字轉換爲float或integer,如果我不知道它是哪一個?

我現在試圖確定如何解析一個字符串,我知道這是一個數字,但我不知道它是一個浮點數還是整數。

我有幾個想法:

function parseNumber(number) 
{ 
    if (number % 1 == 0) 
     return parseInt(number); 
    else 
     return parseFloat(number); 
} 

function parseNumber(number) 
{ 
    if (number.indexOf(".") != -1) 
     return parseFloat(number); 
    else 
     return parseInt(number); 
} 

function parseNumber(number) 
{ 
    if (!number.matches(/([0-9]+.[0-9]+)/)) 
     return parseInt(number); 
    else 
     return parseFloat(number); 
} 

我能想到的一些其他方式。

哪種方式似乎是最好的?

回答

5

你是什麼想要用戶輸入? parseFloat也會解析整數。你總是可以使用它,並且在你實際上想限制自己使用整數的情況下,對結果使用Math.round()

0

這取決於你需要多少嚴謹。

你要去哪裏存放它?如果小數點後沒有任何內容,是否真的打算切換類型?或者它真的只是一個看起來像一個整數的浮點數?

+0

我做的調度場算法。用戶可以輸入給定的表達式。例如:((5 + 3)* 8.2))。當我評估這個表達式(將它轉換爲RPN後)時,我需要將其解析爲適當的類型,以便正確評估。 – KingNestor 2009-10-20 21:41:20

2

至少在webkit上(我現在打開的),parseFloatparseInt都返回數字,唯一的區別是parseInt會砍掉任何通過「。」的東西。

爲了獲得在JavaScript中對象的類型,嘗試這樣的事情

a = parseFloat("55.5") 
a.constructor.toString() // returns Number 
b = parseFloat("55") 
b.constructor.toString() // returns Number 
c = parseInt("55") 
c.constructor.toString() // returns Number 
1

爲什麼你需要做整型之間的差異和雙打的調度場算法?兩者都是數字,並且就我的理解而言,這一切都很重要。確定您的令牌爲數字後,只需使用parseFloat()即可。

+1

我錯誤地認爲他們會解決兩種不同的類型。我從馬特布里格斯現在看到的答案是,情況並非如此。 – KingNestor 2009-10-20 21:50:52

1

JavaScript只有一個數字類型,Number。在內部,它表示爲64位浮點。

與大多數其他編程語言不同,沒有獨立的整數類型,所以5和5.0是相同的值。

要轉換的字符串場次最多的時代,我只是用一元加運算符:

var numberString = "10"; 
var numberValue = +numberString; 
+0

+1用於提示一元加運算符,這就是立即跳出我的想法,並且比使用parseFloat更容易。 – 2009-10-20 23:02:41

相關問題