iT邦幫忙

2024 iThome 鐵人賽

DAY 19
2
Modern Web

如何詠唱JavaScript的Math咒語系列 第 19

[Day19]-輪到你的回合。Math.round()

  • 分享至 

  • xImage
  •  

最近幾天的函式都在取得附近的值,今天要介紹的是Math.round()也是很類似!大家應該都很熟了,他就是四捨五入!!

「寐偲,繞!!!」

讓我們直接開始吧!

Math.round()

在英文中四捨五入叫rounding,所以Math.round(x)就是將x取四捨五入。

語法

Math.round(x)

參數

放入一個數字。

回傳值

他會將x四捨五入到最接近的整數後回傳。

規範

image
這個函式會回傳最接近x的整數,如果有兩個數一樣接近x,將會回傳較靠近+∞的值。如果x已經是整數就回傳x

NOTE1?

下面的註記看一下:
Math.round(3.5)回傳4,但是Math.round(-3.5)回傳-3。」

其實上面的規範很清楚,他寫道「如果有兩個數一樣接近x,就回傳比較靠近+∞的值。」,因為-3-4一樣靠近-3.5,所以回傳了比較靠近+∞-3,話雖如此,但這跟我們平常認知的四捨五入似乎有些出入。

在數學中,負數的四捨五入會先取絕對值轉正之後四捨五入,最後再加上負號就是結果,這點在使用上要特別注意。

NOTE2?

下一句在說什麼呢:
Math.round(x)的值不完全等於Math.floor(x + 0.5)的值。當x-0x小於+0但大於等於-0.5Math.round(x)會回傳-0,但Math.floor(x + 0.5)會回傳+0Math.round(x)的值也可能跟Math.floor(x + 0.5)的值不同,因為x + 0.5是在內部計算。」

我模擬了他會這麼寫的狀況:假設是Math.round(3.7),他會回傳4,等同於Math.floor(3.7 + 0.5),因為我只要在任何數加上0.5,如果沒有進位到整數部分,就表示他原本小數部分就會被四捨五入法捨去;但如果進位到整數,就表示他原本小數部分大於等於0.5,就會被四捨五入法進位;但是假設是Math.round(-0.3),會回傳-0Math.floor(-0.3 + 0.5)的結果會是+0;再來就是因為雙精度浮點數的小數計算會有誤差,所以也可能導致Math.floor(x + 0.5)裡面的值出現誤差,就不能如預期的丟入真實x + 0.5的值了。

總而言之,正數使用的時候不太需要注意,但負數要使用的時候就要小心他的行為可能不如我們預期

來使用看看吧!

console.log(Math.round(3.5)); //4
console.log(Math.round(-3.5)); //-3
console.log(Math.round(3.7)); //4
console.log(Math.round(-3.7)); //-4
console.log(Math.round(Infinity)); //Infinity

「寐偲,繞!!!」

明天見~
參考資料
MDN-Math.round()
ECMAScript-Math.round()


上一篇
[Day18]-斬斷小數點的連結Math.trunc()
下一篇
[Day20]-跟妳心思一樣,猜不透的Math.random()
系列文
如何詠唱JavaScript的Math咒語30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
橘子
iT邦新手 5 級 ‧ 2024-10-03 12:43:56

標題不小心透露你使用別的markdown平台了ಠ⁠∀⁠ಠ

jeremykuo iT邦新手 5 級 ‧ 2024-10-03 12:44:56 檢舉

還是橘大大罩得住/images/emoticon/emoticon20.gif

我要留言

立即登入留言