提问人:Safwan Samsudeen 提问时间:6/5/2023 更新时间:6/5/2023 访问量:124
Ruby 中的 Float#floor 和 Float#to_i 有什么区别?
What's the difference between Float#floor and Float#to_i in Ruby?
问:
我正在学习 Ruby,目前我的数量很多。因此,据我了解,有五种方法(也许更多)可以相互强制整数和浮点数:
Integer#to_f
:胁迫到新的浮动Float#ceil
:四舍五入到最接近的整数Float#floor
:向下舍入到最接近的整数Float#round
:四舍五入到最接近的整数Float#to_i
:截断到最接近的整数
“向下舍入”和“截断”到最接近的整数有什么区别?
当我测试它时...
puts 34.4.to_i()
puts 34.4.floor()
...它产生了相同的值:
34
34
答:
5赞
spickermann
6/5/2023
#1
不同之处在于,基本上只从浮点数中删除小数。while 向下舍入到下一个较低的整数。在处理负浮点数时,差异更容易看出:to_i
float
-34.4.floor
#=> -35
-34.4.to_i
#=> -34
值得一提的是,Float#round
支持不同的舍入模式。
`:up` or `nil`: round away from zero:
2.5.round(half: :up) # => 3
3.5.round(half: :up) # => 4
(-2.5).round(half: :up) # => -3
`:down`: round toward zero:
2.5.round(half: :down) # => 2
3.5.round(half: :down) # => 3
(-2.5).round(half: :down) # => -2
`:even`: round toward the candidate whose last nonzero digit is even:
2.5.round(half: :even) # => 2
3.5.round(half: :even) # => 4
(-2.5).round(half: :even) # => -2
评论
0赞
Safwan Samsudeen
6/5/2023
现在有意义了,谢谢!
6赞
Stefan
6/5/2023
#2
floor
(不带参数)返回小于或等于接收方的下一个整数ceil
(不带参数)返回大于或等于接收器的下一个整数to_i
丢弃接收器的小数部分并返回整数部分
f | f.to_i | F.地板 | F.塞伊尔 | f.圆形 |
---|---|---|---|---|
11.8 | 11 | 11 | 12 | 12 |
11.5 | 11 | 11 | 12 | 12 |
11.2 | 11 | 11 | 12 | 11 |
11.0 | 11 | 11 | 11 | 11 |
-11.2 | -11 | -12 | -11 | -11 |
-11.5 | -11 | -12 | -11 | -12 |
-11.8 | -11 | -12 | -11 | -12 |
to_i
行为类似于正数和负数。floor
ceil
事实上,这实际上是在 numeric.c
中实现的:Float#to_i
static VALUE
flo_to_i(VALUE num)
{
double f = RFLOAT_VALUE(num);
if (f > 0.0) f = floor(f);
if (f < 0.0) f = ceil(f);
return dbl2ival(f);
}
还有截断
,其行为类似于,但采用可选的数字数(如、和)。to_i
floor
ceil
round
评论
0赞
Safwan Samsudeen
6/5/2023
我希望我能接受两个正确的答案,但非常感谢你的回答!
0赞
aka.nice
6/6/2023
也许您可以在表格中添加 10.5 和 -10.5,以记录在完全平局的情况下是四舍五入到最接近的偶数还是远离零......
上一个:匹配两个数字的正则表达式
评论