JavaScript字串轉數字的5種方法及其陷阱

2021-09-18 01:24:09 字數 2150 閱讀 2878

string 轉換為 number 有很多種方式,我可以想到的有 5 種!

parseint(num); // 預設方式 (沒有基數)

parseint(num, 10); // 傳入基數 (十位數)

parsefloat(num); // 浮點數

number(num); // number 構造器

~~num; //按位非

num / 1; // 除乙個數

num * 1; // 乘乙個數

num -

0 + // 減去0

num; // 一元運算子 "+"

選擇哪一種呢?什麼時候選擇它?為什麼選擇這種它?我們逐一進行分析,並解析每種方式的常見陷阱。

根據 jsperf.com 的基準測試,大多數瀏覽器對 parseint 的響應最佳。雖然它是最快的方式,但使用 preseint 會碰到一些常見陷阱:

parseint("08"); // returns 0 部分老瀏覽器.

parseint: 沒有傳入基數時,預設是傳入的基數為 10parseint(num, 10),如果你不知道 num 屬性的型別,不要使用 parseint 進行字串轉數字。

如果你不解析 16 進製數,這是乙個非常好的選擇。例如:

parseint(-0xff); // returns -255

parseint("-0xff"); // returns -255

parsefloat(-0xff); // returns -255

parsefloat("-0xff"); // returns 0

注意:字串中的負十六進製制數字是乙個特殊情況,如果你用 parsefloat 解析,結果是不正確的。為了避免程式出現 nan 的情況,應該檢查轉化後的值。

parsefloat: 轉換十六進製制數時要小心,如果你不知道要轉換物件的型別,不要使用 parsefloat。

可以把字串轉換成整數,但他不是浮點數。如果是乙個字串轉換,它將返回 0;

~~1.23; // returns 1

~~"1.23"; // returns 1

~~"23"; // returns 23

~~"hello world"; // returns 0

這是什麼原理?通過翻轉》)每個位,也稱為數字的 a1 補碼。你可以使用它,但注意只能用來儲存整數。所以通常情況不要用它,除非你能確定這個數是在 32 位整數之間的值(因為呼叫的 toint32 的規範)。

按位非:用它確保輸入中沒有字元,僅用於整數。

number 與以上提及的轉換方式一樣存在這樣的問題,解析時試圖找出你給他的數字:

number("023"); // returns 23

number(023); // returns 19

注意:023 實際上是乙個八進位制數,無論你怎麼做,都是返回 19;對於沒有單引號或雙引號的十六進製制數一樣。

number 也是 jsperf 中最慢的之一。

number:幾乎不用它。

一元運算子與其它的解析方式不同,如果是乙個 nan 值,那麼返回的也是 nan 。這是我最喜歡的數值轉換方式,因為我認為任何帶有字元的物件都不應該被視為 0 或者根據他有多少位來「猜」。我基本使用+操作符,因為這個方式不容易混淆。雖然-0的用法也很好,但它並沒有很好的表達轉換為數字的本意。

負十六進製制數字串轉換為數字時。應首先將任何其轉換為 string(例如通過+ ""),然後使用一元運算子或帶基數的 parseint 解析為數字。但是結果不是 nan 的數值時,使用 parsefloat 更為合適。

字串 字串轉數字

題目 將乙個字串轉換成數字。例如 123 123,71.02 71.02.方法一,直接呼叫庫函式atoi const char 和atof const char stoi string str include include int main 輸出結果 num int 435 num double ...

字串轉數字

注意進製,注意小數,負數,指數。小數跟指數比較繁瑣。應該對字串做限制,字串只是整數字串。否則,以下幾種情況都是會報錯 1.0x011.011,0b011.011都是錯誤的。2.0100.011實際上是十進位制的100.01。3.指數表示造成邏輯更多了。鑑於以上幾個情況考慮,為簡化,整數字串轉數字。草...

字串轉數字

看了劍指offer上面的第一道題,字串轉數字,就去查了下,有多種方法。比如可以直接用函式atoi 下面是我的 include include include include includeusing namespace std int main string a 100 int num 0 if a...