2015-11-05 194 views
1

如果我不知道變量是整數數字還是小數數字類型,是否有直接的方法將字符串解析爲整數或浮點數?將字符串轉換爲javascript中的整數或浮點數

a = '2'; // => parse to integer 
b = '2.1'; // => parse to float 
c = '2.0'; // => parse to float 
d = 'text'; // => don't parse 

編輯:看來我的問題缺乏必要的背景:我想要做一些計算,而不會丟失原始格式(原始格式,從而意味着整數與浮點我不在乎原小數的。地方):

實施例:

String containing the formatted number ('2') => parse to number (2.0) => do some calculations (2.0 + 1 = 3.0) => restore "original format" ('3' and not '3.0')

如果輸入爲2.0,而不是,有用的結果將是 '3.0'(不是 '3')。

+0

爲什麼你wan't解析? Javascript有動態類型。而且,它唯一的數字類型是雙倍的。 –

+0

@david a .:謝謝你指出。我沒有意識到這一點。如果只有一種數字類型,仍然想知道爲什麼JavaScript中有兩個函數(parseInt,parseFloat)。 – am2124429

+1

我認爲不同之處在於兩個解析輸入的方式 - parseInt()只取其整數部分,而parseFloat()取小數(也可能取指數)。但是,它們都返回相同的類型(數字,實際上是一個浮點類型)。請參閱JS編號規格:http://www.ecma-international.org/ecma-262/6.0/index.html#sec-terms-and-definitions-number-value。 MSDN在這裏提到了同樣的事情:https://msdn.microsoft.com/library/7wkd9z69(v=vs.94).aspx#Anchor_4 –

回答

0

這就是我最終解決它的方法。我沒有發現任何其他的解決辦法,而不是變量類型添加到變量...

var obj = { 
 
\t a: '2', 
 
\t b: '2.1', 
 
\t c: '2.0', 
 
\t d: 'text' 
 
}; 
 
// Explicitly remember the variable type 
 
for (key in obj) { 
 
    var value = obj[key], type; 
 
    if (isNaN(value) || value === "") { 
 
    type = "string"; 
 
    } 
 
    else { 
 
    if (value.indexOf(".") === -1) { 
 
     type = "integer"; 
 
    } 
 
    else { 
 
     type = "float"; 
 
    } 
 
    value = +value; // Convert string to number 
 
    } 
 
    obj[key] = { 
 
    value: value, 
 
    type: type 
 
    }; 
 
} 
 
document.write("<pre>" + JSON.stringify(obj, 0, 4) + "</pre>");

6

將數字數據與1相乘的字符串。您將獲得數字值數據值。

var int_value = "string" * 1; 

在你的情況

a = '2' * 1; // => parse to integer 
b = '2.1' * 1; // => parse to float 
c = '2.0' * 1; // => parse to float 
d = 'text' * 1; // => don't parse //NaN value 

對於最後一個,你會得到NaN值。手動處理NaN值

+0

這看起來比我們接受的解決方案更好,對我而言效果很好。 – alberto2000

+0

即使與JSON.parse相比,這也是迄今爲止最快的方法。 – Ravenstine