我正在学习Ruby,我现在在数字。因此,据我所知,有五种方法(也许更多)可以将整数和浮点数相互强制:
Integer#to_f
:强制到一个新的floatFloat#ceil
:向上舍入到最接近的整数Float#floor
:向下舍入到最接近的整数Float#round
:舍入到最接近的整数Float#to_i
:截断为最接近的整数
“四舍五入”和“截断”到最接近的整数有什么区别?
当我测试它的时候...
puts 34.4.to_i()
puts 34.4.floor()
...它产生了相同的值:
34
34
2条答案
按热度按时间cclgggtu1#
floor
(无参数)返回小于或等于接收方的下一个整数ceil
(无参数)返回下一个大于或等于接收方的整数to_i
丢弃接收器的小数部分并返回整数部分| 关闭|f.to_i| f.floor | f.ceil | f.round |
| - -----|- -----|- -----|- -----|- -----|
| 11.8 |十一|十一|十二岁|十二岁|
| 11.5 |十一|十一|十二岁|十二岁|
| 11.2 |十一|十一|十二岁|十一|
| 11.0 |十一|十一|十一|十一|
| -11.2|-11|- 十二|-11|-11|
| -11.5|-11|- 十二|-11|- 十二|
| -11.8|-11|- 十二|-11|- 十二|
对于正数,
to_i
的行为类似于floor
,对于负数,ceil
的行为类似于ceil
。实际上,这就是
Float#to_i
在numeric.c
中的实现方式:还有
truncate
,其行为类似于to_i
,但采用可选的数字数(如floor
,ceil
和round
)。hgncfbus2#
不同之处在于
to_i
基本上只从浮点数中删除小数。而float
向下舍入到下一个较低的整数。在处理负浮点数时,更容易看出区别:值得注意的是,
Float#round
支持不同的舍入模式。