You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:12:03