lodash閱讀-ceil

ceil.js

// ceil.js,向上舍入
const ceil = createRound('ceil')
export default ceil

// creteRound.js
function createRound(methodName) {
  const func = Math[methodName] // 獲取js的Math對象的方法
  return (number, precision) => { // 精度表明位數,正數表明保留小數點後幾位,負數表明保留小數點前幾位
    precision = precision == null ? 0 : (precision >= 0 ? Math.min(precision, 292) : Math.max(precision, -292)) // 獲取精度值[-292, 292]之間
    if (precision) {
      // 1. 轉成字符串形式,如123.45e
      // 2. 而後用e分割成數組['123.45', '']
      let pair = `${number}e`.split('e')
      // 1. 將上一步獲取的數組和精度從新合併成字符串'123.45e1'(假如精度是1的話)、
      // 2. 而後調用實際的Math函數,即ceil('123.45e1') => ceil(1234.5) ==> 1234
      const value = func(`${pair[0]}e${+pair[1] + precision}`)

      // 將上一步獲取的數值,再轉成浮點數形式'1234e' => ['1234', '']
      pair = `${value}e`.split('e')
      // 恢復數據的精度 '1234e-1' => 123.4
      return +`${pair[0]}e${+pair[1] - precision}`
    }
    return func(number)
  }
}
// 數據轉換流程以下
// (123.45, 1) => `123.45e` => ['123.45', ''] => ceil(`123.45e1`) => 1234 => `1234e-1` => 123.4
複製代碼

默認的Math.ceil只能對數據進行向上取整,lodash的ceil方法比Math.ceil強大一些數組

相關文章
相關標籤/搜索