2026年9月7日 星期一

關於 Number.toExponential()

 關於 Number.toExponential()

前言

  JavaScript 提供一種用指數的表達數值的表示法,也就是透過 Number.toExponential() ,在此把學習的過程做個紀錄。


內容

  範例如下

let num = 1234;
console.log( num.toExponential() );//1.234e+3
console.log( typeof num.toExponential() );//string
console.log(  1.234 * (10 ** 3) );//1234


Number.toExponential() 用法就直接使用取還傳值即可,範例可以得到 1.234e+3 的結果,要注意這個結果並不是用 Number 來儲存,而是 String ,也許看到結果裡有一個"e"馬上就想到自然指數 e ,但其實跟自然指數 e 一點關係都沒有,結果的那個字串代表的意思可以在範例的最後看到,只是前方的數字乘上 10 的幾次方而已。


參考資料

[ developer.mozilla.org ] Number.prototype.toExponential()

2026年8月31日 星期一

關於 Number.toPrecision()

 關於 Number.toPrecision()

前言

  在之前的 修正 Number 的小數位數 修正 Number 的小數位數,還有另一個跟它功能相似的 Number.toPrecision() ,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Math.PI.toPrecision(2) );//3.1
console.log( Math.PI.toPrecision(5) );//3.1416
//
let num = 1234;
console.log( num.toPrecision(2) );//1.2e+3


Number.toPrecision() 的用法跟 Number.toFixed() ,引數一樣是輸入要修正的位數,兩者的差別是對精度的為數計算不一樣, Number.toFixed()  只計算小數的位數,而 Number.toPrecision() 把整數與小數的部分都計算。範例第一例的結果 3.1 是因為只有兩位數,第二例的結果 3.1416 和Number.toFixed() 的理由一樣,小數的末位會四捨五入,最後,如果位數不足以顯示整數的時候會用指數的方式來表示。


參考資料

[ developer.mozilla.org ] Number.prototype.toPrecision()


相關文章與資料

修正 Number 的小數位數


2026年8月24日 星期一

修正 Number 的小數位數

 修正 Number 的小數位數

前言

  最近發現 JavaScript 有自帶可以修正小數位數的 Function ,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Math.PI );//3.141592653589793
console.log( Math.PI.toFixed(2) );//3.14
console.log( Math.PI.toFixed(4) );//3.1416


使用 Number 自帶的 toFixed() 就可以修正小數的位數,引數是要修正的位數。範例使用 Math.PI ,透過修正 2 位數得到 3.14 ,在來修正 4 位數得到 3.1416,而不是 3.1415 ,因為會四捨五入,而且這個特性是改不掉的!這點一定要注意。


參考資料

[ developer.mozilla.org ] Number.prototype.toFixed()

2026年8月17日 星期一

關於 Number 的整數有效值

 關於 Number 的整數有效值

前言

  最近才知道原來 Number 在表達整數時會有有效值的範圍,超出去的時候是不會有任何警告的,不過有提供相關函數來檢查,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Number.MAX_SAFE_INTEGER );//9007199254740991
console.log( Number.MAX_SAFE_INTEGER + 100);//9007199254741092
//
console.log( Number.isSafeInteger( Number.MAX_SAFE_INTEGER ) );//true
console.log( Number.isSafeInteger( Number.MAX_SAFE_INTEGER + 1) );//false
//
console.log( Number.MIN_SAFE_INTEGER );//-9007199254740991


Number 的最大有效值可以透過 Number.MAX_SAFE_INTEGER 來檢查,可以看到當範例對  Number.MAX_SAFE_INTEGER 加 100 後的結果是不正確的!也就是當超過有效值的範圍後勢不保證結果正確的!要確認是否為有效值可以透過 Number.isSafeInteger() 來確認。有 Number.MAX_SAFE_INTEGER  當然就有 Number.MIN_SAFE_INTEGER ,它其實就是 Number.MAX_SAFE_INTEGER 乘上負號。


參考資料

[ developer.mozilla.org ] Number.MAX_SAFE_INTEGER

2026年8月10日 星期一

關於 Math.Max() 與 Math.min()

 關於 Math.Max() 與 Math.min()

前言

  找出陣列的最大或最小值是很常見的需求,但如果直接從陣列找必須透過排序或用迴圈來完成,有簡短的方式完成嗎?答案是肯定的,那就是 Math.Max() 與 Math.min() ,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Math.min( 1 , 2 , 3 ) );//1
console.log( Math.max( 1 , 2 , 3 ) );//3
//
let ar = [ 1111 , 5555 , 9999 ];
console.log( Math.min( ...ar) );//1111
console.log( Math.max( ...ar) );//9999


Math.Max() 與 Math.min() 的使用方法很簡單,只要將所有的數值輸入到引數就好,Math.Max() 會回傳最大的數值, Math.min() 會回傳最最小的數值。Math.Max() 與 Math.min() 本身並不不支援直接輸入陣列來得到結果,所以如果要取得陣列的最大或最小要透過 ... 來陣列分解後輸入。


參考資料

[ developer.mozilla.org ] Math.min()

[ developer.mozilla.org ] Math.max()

2026年8月3日 星期一

關於 Math.trunc()

 關於 Math.trunc()

前言

  最近發現 Math.trunc() 可以直接處理掉小數的部分,而且不用管正負數都是直接保留整數,仔此把學習的過程做個紀錄。


內容

  範例如下

console.log( Math.trunc( 12.33 ) );//12
console.log( Math.trunc( -99 ) );//-99
console.log( Math.trunc( -12.33 ) );//-12


用起來跟 Math.floor() 、 Math.ceil() 與 Math.round() ,但她使用時不需考慮正負數,都是直接保留整數,用起來直覺且簡單。


參考資料

[ developer.mozilla.org ] Math.trunc()

2026年7月27日 星期一

關於 Math.sumPrecise()

 關於 Math.sumPrecise()

前言

  Math.sumPrecise() 看說明是為了解決連續加浮點數造成的誤差問題,但實際用起來似乎有些問題,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Math.sumPrecise( [0.1, 0.2] ) );//0.30000000000000004
console.log( Math.sumPrecise( [0.1, 0.2, 0.3] ) );//0.6
console.log( Math.sumPrecise( [0.1, 0.2, 0.3, 0.4 ] ) );//1.0
//
let ar1 = [0.1, 0.2];
let ar2 = [0.1, 0.2, 0.3];
let ar3 = [0.1, 0.2, 0.3, 0.4];
console.log( ar1.reduce((a, b) => a + b, 0) );0.30000000000000004
console.log( ar2.reduce((a, b) => a + b, 0) );0.6000000000000001
console.log( ar3.reduce((a, b) => a + b, 0) );1


Math.sumPrecise() 的用法很簡單,引數只支援輸入一個陣列,並不支援多個引數的輸入,透過回傳值取得加完後的結果,範例分別示範了三種狀況,但在第一個狀況就發生有精度的問題!而且這個狀況是符合規格的,在 [ developer.mozilla.org ] Math.sumPrecise() 有說這是合理的結果,所以使用 Math.sumPrecise() 還是有精度的問題要解決,算是只解決一半,最後範例分別把三種狀況使用直接加的方式呈現,可以跟開始的三個示範做比較。


  感覺 Math.sumPrecise() 並不可靠,問題只解決一半,也許日後的版本會解決這個問題,現在還是不建議使用。


參考資料

[ developer.mozilla.org ] Math.sumPrecise()