我花了一些时间完成一个关于拆分数组的非常简单的任务。直到我发现:2 == 5/2和-3 == -5/2。要获取,-2我需要从括号中减去负号:-2 == -(5/2)。为什么会这样?据我了解,结果四舍五入为最小整数,但是(-2.5).to_i == -2。非常好奇。
# https://www.codewars.com/kata/swap-the-head-and-the-tail/train/ruby
# -5/2 != -(5/2)
def swap_head_tail a
a[-(a.size/2)..-1] + a[a.size/2...-(a.size/2)] + a[0...a.size/2]
end
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 14
为什么会这样?
除了正在查找的答案之外,还不清楚您正在寻找什么样的答案(我的粗体强调):
15.2.8.3.4
Integer#/
/(其他)
- 公开程度:公开
- 行为:
- a)如果other是该类的实例
Integer:
- 1)如果other的值为0,则引发该类的直接实例
ZeroDivisionError。- 2)否则,令n为接收器的值除以other的值。返回该类的实例,该实例的
Integer值是小于或等于n的最大整数。
注意即使接收器的值为负,其行为也相同。例如,-5 / 2return-3。
如您所见,该规范甚至包含您的确切示例。
它也在Ruby / Spec中指定:
Run Code Online (Sandbox Code Playgroud)it "supports dividing negative numbers" do (-1 / 10).should == -1 end
将此与Float#to_i(粗体强调)的规范进行比较:
15.2.9.3.14
Float#to_i
to_i
- 公开程度:公开
- 行为:该方法返回该类的实例,
Integer其值是接收者的整数部分。
Run Code Online (Sandbox Code Playgroud)it "returns self truncated to an Integer" do 899.2.send(@method).should eql(899) -1.122256e-45.send(@method).should eql(0) 5_213_451.9201.send(@method).should eql(5213451) 1.233450999123389e+12.send(@method).should eql(1233450999123) -9223372036854775808.1.send(@method).should eql(-9223372036854775808) 9223372036854775808.1.send(@method).should eql(9223372036854775808) end
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |