JavaScript 數字
在本教程中,你將學習如何在 JavaScript 中表示數字。
使用數字
JavaScript 支援整數和浮點數,可以用十進位制,十六進位制或八進位制表示法表示。與其他語言不同,JavaScript 不會以不同方式處理整數和浮點數。JavaScript 中的所有數字都表示為浮點數。這是一個展示不同格式的數字的示例:
var x = 2; // integer number
var y = 3.14; // floating-point number
var z = 0xff; // hexadecimal number
超大數字可以用指數表示法表示,例如 6.02e+23
(與 6.02x10 23 相同)。
var x = 1.57e4; // same as 15700
var y = 4.25e+6; // same as 4.25e6 or 4250000
var z = 4.25e-6; // same as 0.00000425
提示: JavaScript 中最大的安全整數是 9007199254740991
(253-1),而最小的安全整數是 -9007199254740991
(-(253-1))。
數字也可以用十六進位制表示法表示(基數 16)。十六進位制數字以字首為字首 0x
。它們通常用於表示顏色。這是一個例子:
var x = 0xff; // same as 255
var y = 0xb4; // same as 180
var z = 0x00; // same as 0
注意: 整數可以用十進位制,十六進位制和八進位制表示法表示。浮點數可以用十進位制或指數表示法表示。
運算元字和字串
如前所述, +
運算子用於加法和連線。因此,對數字和字串執行數學運算可能會產生有趣的結果。以下示例將向你顯示新增數字和字串時會發生什麼:
var x = 10;
var y = 20;
var z = "30";
// Adding a number with a number, the result will be sum of numbers
console.log(x + y); // 30
// Adding a string with a string, the result will be string concatenation
console.log(z + z); // '3030'
// Adding a number with a string, the result will be string concatenation
console.log(x + z); // '1030'
// Adding a string with a number, the result will be string concatenation
console.log(z + x); // '3010'
// Adding strings and numbers, the result will be string concatenation
console.log("The result is: " + x + y); // 'The result is: 1020'
// Adding numbers and strings, calculation performed from left to right
console.log(x + y + z); // 'The result is: 3030'
如果仔細觀察上面的例子,你會發現最後一個操作的結果不僅僅是一個簡單的字串連線,因為具有相同優先順序的運算子是從左到右計算的。這就是為什麼,因為變數 x
和 y
都是數字,所以它們首先被新增,然後結果與變數 z
連線,這是一個字串,因此最終結果是 30 + "30" = "3030"
。
但是,如果執行其他數學運算,如乘法、除法或減法,結果將會有所不同。的 JavaScript 將自動轉換數字字串 (即字串包含數字值),以數字在所有的數字操作,顯示在下面的例子:
var x = 10;
var y = 20;
var z = "30";
// Subtracting a number from a number
console.log(y - x); // 10
// Subtracting a number from a numeric string
console.log(z - x); // 20
// Multiplying a number with a numeric string
console.log(x * z); // 300
// Dividing a number with a numeric string
console.log(z / x); // 3
此外,如果你嘗試使用非數字字串對數字進行乘法或除法,則返回 NaN
(非數字)。此外,如果你 NaN
在數學運算中使用,結果也將是 NaN
。
var x = 10;
var y = "foo";
var z = NaN;
// Subtracting a number from a non-numeric string
console.log(y - x); // NaN
// Multiplying a number with a non-numeric string
console.log(x * y); // NaN
// Dividing a number with a non-numeric string
console.log(x / y); // NaN
// Adding NaN to a number
console.log(x + z); // NaN
// Adding NaN to a string
console.log(y + z); // fooNaN
無窮大
無窮大代表了一個太大而無法處理 JavaScript 的數字。JavaScript 具有特殊關鍵字 Infinity
, -Infinity
分別代表正負無窮大。例如,除以 0
的結果是 Infinity
,如下所示:
var x = 5 / 0;
console.log(x); // Infinity
var y = -5 / 0;
console.log(y); // -Infinity
避免精確問題
有時,對浮點數的操作會產生意外結果,如下所示:
var x = 0.1 + 0.2;
console.log(x) // 0.30000000000000004
正如你所看到的,結果 0.30000000000000004
不是預期的結果 0.3
。這種差異稱為表示錯誤或 舍入誤差。之所以出現這種情況是因為 JavaScript 和許多其他語言使用二進位制(基數 2)形式在內部表示十進位制(基數為 10)的數字。不幸的是,大多數小數部分不能以二進位制形式精確表示,因此會出現很小的差異。
要避免此問題,你可以使用以下解決方案:
var x = (0.1 * 10 + 0.2 * 10) / 10;
console.log(x) // 0.3
JavaScript 將浮點數舍入為 17 位數,這在大多數情況下足夠精確或準確。此外,在 JavaScript 中,整數(沒有小數部分或指數表示法的數字)的準確度最高可達 15 位,如下例所示:
var x = 999999999999999;
console.log(x); // 999999999999999
var y = 9999999999999999;
console.log(y); // 10000000000000000
對數字執行操作
JavaScript 提供了幾個屬性和方法來對數值執行操作。正如你在前面的章節中已經知道的那樣,在 JavaScript 中,當你使用屬性訪問表示法(即點表示法)引用它們時,原始資料型別可以像物件一樣。
在以下部分中,我們將介紹最常用的數字方法。
解析字串中的整數
parseInt()
方法可用於解析字串中的整數。當你在處理像 CSS 單位例如值此方法在以下情況下特別方便 50px
, 12pt
等你想提取的數值出來。
如果 parseInt()
方法遇到指定基數中不是數字的字元,它將停止解析並返回解析到該點的整數值。如果第一個字元無法轉換為數字,則該方法將返回 NaN
(不是數字)。
允許前面和後面填充空格。這是一個例子:
console.log(parseInt("3.14")); // 3
console.log(parseInt("50px")); // 50
console.log(parseInt("12pt")); // 12
console.log(parseInt("0xFF", 16)); // 255
console.log(parseInt("20 years")); // 20
console.log(parseInt("Year 2048")); // NaN
console.log(parseInt("10 12 2018")); // 10
注意: parseInt()
方法將數字截斷為整數值,但不應將其用作 Math.floor()
方法的替代。
同樣,你可以使用該 parseFloat()
方法從字串中解析浮點數。parseFloat()
方法的工作方式與 parseInt()
方法相同,只是它檢索整數和帶小數的數字。
console.log(parseFloat("3.14")); // 3.14
console.log(parseFloat("50px")); // 50
console.log(parseFloat("1.6em")); // 1.6
console.log(parseFloat("124.5 lbs")); // 124.5
console.log(parseFloat("weight 124.5 lbs")); // NaN
console.log(parseFloat("6.5 acres")); // 6.5
將數字轉換為字串
toString()
方法可用於將數字轉換為其等效字串。此方法可選地接受範圍為 2 到 36 的整數引數,指定用於表示數值的基數。這是一個例子:
var x = 10;
var y = x.toString();
console.log(y); // '10'
console.log(typeof y); // string
console.log(typeof x); // number
console.log((12).toString()); // '12'
console.log((15.6).toString()); // '15.6'
console.log((6).toString(2)); // '110'
console.log((255).toString(16)); // 'ff'
以指數表示法格式化數字
你可以使用該 toExponential()
方法以指數表示法格式化或表示數字。此方法可選地接受一個整數引數,指定小數點後的位數。此外,返回的值是字串而不是數字。這是一個例子:
var x = 67.1234;
console.log(x.toExponential()); // 6.71234e+1
console.log(x.toExponential(6)); // 6.712340e+1
console.log(x.toExponential(4)); // 6.7123e+1
console.log(x.toExponential(2)); // 6.71e+1
注意: 指數表示法對於表示幅度非常大或非常小的數字非常有用。例如,62500000000
可寫為 625e+8
或 6.25e+10
。
將數字格式化為固定小數
如果要格式化小數點右側固定位數的數字,可以使用 toFixed()
方法。此方法返回的值是一個字串,它具有精確指定的小數點後面的數字的個數。如果未指定或省略引數,則將引數視為 0.以下是一個示例:
var x = 72.635;
console.log(x.toFixed()); // '73' (note rounding, no fractional part)
console.log(x.toPrecision(2)); // '72.64' (note rounding)
console.log(x.toPrecision(1)); // '72.6'
var y = 6.25e+5;
console.log(y.toFixed(2)); // '625000.00'
var z = 1.58e-4;
console.log(z.toFixed(2)); // '0.00' (since 1.58e-4 is equal to 0.000158)
精確格式化數字
如果你想要最合適的數字形式,則可以使用 toPrecision()
方法。此方法返回表示指定精度的數字的字串。
如果精度足夠大以包括數字的整數部分的所有數字,則使用定點表示法格式化數字。否則,使用指數表示法格式化數字。precision
引數是可選的。這是一個例子:
var x = 6.235;
console.log(x.toPrecision()); // '6.235'
console.log(x.toPrecision(3)); // '6.24' (note rounding)
console.log(x.toPrecision(2)); // '6.2'
console.log(x.toPrecision(1)); // '6'
var y = 47.63;
console.log(y.toPrecision(2)); // '48' (note rounding, no fractional part)
var z = 1234.5;
console.log(z.toPrecision(2)); // '1.2e+3'
尋找最大和最小的可能數字
數字物件還有幾個與之關聯的屬性。數字物件的 Number.MAX_VALUE
和 Number.MIN_VALUE
屬性表示 JavaScript 可以處理的最大和最小(最接近零,而不是最負)可能的正數。他們是常數,它們的實際值分別是 1.7976931348623157e+308
和 5e-324
。
超出可能數字範圍的數字由常數 Number.POSITIVE_INFINITY
或 Number.NEGATIVE_INFINITY
。這是一個例子:
var a = Number.MAX_VALUE;
console.log(a); // 1.7976931348623157e+308
var b = Number.MIN_VALUE;
console.log(b); // 5e-324
var x = Number.MAX_VALUE * 2;
console.log(x); // Infinity
var y = -1 * Number.MAX_VALUE * 2;
console.log(y); // -Infinity
另外,請檢視 JavaScript 數學運算 章節,瞭解有關舍入數字,生成隨機數,從一組數字中查詢最大值或最小值等的資訊。