如何不使用ceil()、floor()等JavaScript函数实现float转integer
JavaScript 无依赖Math.ceil/Math.floor实现浮点数转整数方案
以下实现完全不调用Math内置的ceil、floor、round系列方法,覆盖三种常用的浮点数转整数场景:
1. 向下取整(对齐Math.floor效果)
规则:正数截断小数部分,负数向更小的整数舍入,例如2.3→2、-2.3→-3
function customFloor(num) { // 本身是整数直接返回 if (num === ~~num) return num return num > 0 ? ~~num : ~~num - 1 } // 测试用例 console.log(customFloor(2.3)) // 2 和Math.floor(2.3)输出一致 console.log(customFloor(5.7)) // 5 console.log(customFloor(-2.3)) // -3
说明:
~~为双按位非运算,作用是直接截断浮点数的小数部分,等效于num | 0、num >> 0、Number.parseInt(num)的截断效果。
2. 向上取整(对齐Math.ceil效果)
规则:正数向更大的整数舍入,负数直接截断小数部分,例如5.7→6、-2.3→-2
function customCeil(num) { // 本身是整数直接返回 if (num === ~~num) return num return num > 0 ? ~~num + 1 : ~~num } // 测试用例 let a = 5.7 console.log(customCeil(a)) // 6 和Math.ceil(a)输出一致 console.log(customCeil(2.3)) // 3 console.log(customCeil(-2.3)) // -2
3. 截断取整(仅去掉小数部分)
如果不需要对齐ceil/floor的舍入规则,只需要直接丢弃小数部分,直接用截断运算即可:
let positive = 5.7 console.log(~~positive) // 5 console.log(positive | 0) //5 console.log(Number.parseInt(positive)) //5 let negative = -2.3 console.log(~~negative) // -2 console.log(negative | 0) // -2
内容的提问来源于stack exchange,提问作者Muhammad Abubakar Zorrain
相关产品推荐
相关产品推荐

