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......)
沒有留言:
張貼留言