Ruby中Float#floor与Float#to_i的区别是什么?
Ruby中
floor(向下取整)与to_i(截断取整)的区别 你测试的正数场景下两者结果一致,但核心差异体现在负数的处理上:
行为差异
- 对于正数:
floor和to_i都会舍弃小数部分,返回整数部分,比如34.4.to_i和34.4.floor都返回34。 - 对于负数:
Float#floor:向负无穷方向取最近的整数,也就是返回小于等于当前浮点数的最大整数。例如-34.4.floor会返回-35。Float#to_i:直接截断小数部分,只保留整数位,相当于取浮点数的整数部分。例如-34.4.to_i会返回-34。
测试代码验证
# 正数场景 puts 34.4.to_i # 输出 34 puts 34.4.floor # 输出 34 # 负数场景 puts -34.4.to_i # 输出 -34 puts -34.4.floor # 输出 -35
总结
floor遵循“向下取整”逻辑,无论正负都找不大于当前数的最大整数to_i是纯粹的截断操作,直接去掉小数部分,只保留整数位
内容的提问来源于stack exchange,提问作者Safwan Samsudeen
相关产品推荐
相关产品推荐

