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强大一些