Почему это происходит?
Не совсем ясно, какой ответ вы ищете, кроме , потому что именно так он указан ( жирный шрифт выделено):
15.2.8.3.4 Integer#/
/(
прочее )
- Видимость : общедоступный
- Поведение :
- a) Если other является экземпляром класса
Integer
: - 1) Если значение other равно 0 , создайте прямой экземпляр класса
ZeroDivisionError
. - 2)В противном случае, пусть n будет значением получателя, деленным на значение other .Вернуть экземпляр класса
Integer
, значение которого является наибольшим целым числом, меньшим или равным n .
ПРИМЕЧАНИЕ Поведение остается тем же, даже если получатель имеет отрицательное значениестоимость. Например, -5 / 2
возвращает -3
.
Как видите, спецификация даже содержитваш точный пример.
Он также указан в Ruby / Spec :
it "supports dividing negative numbers" do
(-1 / 10).should == -1
end
Сравните это со спецификацией для Float#to_i
( жирный выделенный):
15.2.9.3.14 Float#to_i
to_i
- Visibility : public
- Поведение : метод возвращает экземпляр класса
Integer
, значение которого целочисленная часть получателя .
А в Рубин / Спец :
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