HOWTO · JavaScript

在 JavaScript 對數字求平方

本教程說明如何在 JavaScript 中對數字求平方

本頁內容

在 JavaScript 中,將數值提升至二次方即可求平方:number ** 2。例如,5 ** 2 的結果是 25。一般的 Number 值使用這種寫法最清楚;也可以使用乘法或 Math.pow()。

在 JavaScript 中對 Number 求平方

平方就是將一個數值乘以自身。日常計算通常使用 JavaScript 的 Number 型別,整數和小數都適用。以下獨立範例直接計算平方,並印出結果:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

const number = 5;
console.log(number ** 2);

** 後方的值是指數。使用 2 可求平方,使用 3 可求立方,也可以指定其他指數來計算不同次方。這個運算也適用於負數和小數形式的 Number 值;例如,負數平方後會得到非負結果。JavaScript 的數值採用浮點數運算,因此計算非常大的數值或高精度小數時,可能無法保留數學結果中的每一位數字。

使用指數運算子

** 是指數運算子,不是方法。左運算元是底數,右運算元是指數,因此 base ** 2 可直接表示平方。若要計算變數的平方,就像其他運算一樣指定這個運算式:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

const base = 8;
const squared = base ** 2;
console.log(squared);

將負底數寫成數值常值時,請加上括號:(-3) ** 2 表示將負三平方。省略括號時,一元負號和指數運算的結合方式不同,而且 -3 ** 2 會產生語法錯誤。如果數值已存入變數,value ** 2 就不需要額外加括號。

使用乘法或 Math.pow()

也可以將數值乘以自身。若要明確表達這項運算,這種寫法可能更容易閱讀;而 ** 則會清楚呈現指數。較早期的內建函式 Math.pow(base, exponent) 表達相同的底數與指數關係,在採用這種風格的程式碼中仍然實用。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

const number = 5;
const byMultiplication = number * number;
const byMathPow = Math.pow(number, 2);
console.log(byMultiplication, byMathPow);

對一般的 Number 輸入,這三種寫法都會使用 JavaScript 的浮點數表示法計算次方。請依照周圍程式碼選擇合適的寫法;這些方式都無法提供精確的任意精度小數運算。

將平方運算封裝成可重複使用的函式

如果多處都需要相同的運算,可以將它放進函式中。需要可重複使用的函式宣告時,具名函式很方便;箭頭函式則是精簡的替代寫法,也適用於回呼函式。以下範例分別定義並呼叫這兩種形式:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

function squareNumber(value) {
  return value ** 2;
}

console.log(squareNumber(6));
const square = (value) => value ** 2;
console.log(square(6));

這兩個函式都接受一個值並回傳其平方。它們不會驗證或轉換輸入,因此呼叫端應傳入符合預期數值行為的值。例如,字串經隱式轉換後再相乘,可能產生令人意外的結果;必要時,請先轉換並驗證外部輸入,再呼叫輔助函式。

需要精確整數時,使用 BigInt 求平方

JavaScript 的 Number 值只能在 Number.MAX_SAFE_INTEGER(9,007,199,254,740,991)範圍內精確表示整數。若整數運算超出此範圍後仍須保持精確,請從一開始就使用 BigInt。在整數常值後加上 n 後綴,再使用相同的指數運算子:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

const largeInteger = 9007199254740993n;
const squared = largeInteger ** 2n;
console.log(squared);

BigInt 指數也必須是 BigInt,因此範例使用 2n。BigInt 支援整數,不支援小數。JavaScript 不允許在算術運算中混用 BigInt 和 Number 運算元:必要時請審慎轉換,並記住,若 Number 已經失去精度,轉換後也無法還原遺失的數字。一般數值運算請使用 Number;需要精確的大整數運算時則使用 BigInt。