test

(標題不會顯示)

2022年2月23日 星期三

JavaScript 四捨五入小數位到符合五的倍數

 javascript round:

引用 Math.round 僅能處理整數,且有瑕疵(參見: javascript round bug)

於是實際應用時會包裝如下:

function round(value, decimals) {
  return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}

這樣小數也能處理了。

另對於四捨五入到某個倍數的問題: (此例為5)

(js round to nearest multiple of ) 

解法是: Math.round(x/5)*5

同樣的,改以包裝過的 round 來處理,則是:

v = 24.056

round(round(v/5,2)*5,2) // 做兩次

就能正確得到 24.05 了

因為第一次是: round(24.056/5,2)*5 = 24.04999...7 (小數位被乘數放大了)

所以再 round 一次約束回小數兩位

round(24.04999...7,2) = 24.05

--

應用: 為何是五的倍數?

用於製作地圖時間隔錯開用。(even or odd)

例如緯經度方格 latitude & longitude grid ( unit 0.1)

選定 longitude 經度於偶數時(ex. 121.2) ,緯度向下平移 0.05  

則在此偶數 long 上,lat 則為 (0.0-> 0.95, 0.1->0.05, 0.2->0.15......)