2016-10-11 2 views
6

저는 루비를 처음 사용했습니다. 분수 또는 십진수 (비슷한 값)가 사용되면 다른 답변을 얻으므로 ceilfloor의 작동 방식을 파악하려고합니다. 아래는 내가 시도 것입니다 :Ruby .ceil 및 .floor

puts 8/3.ceil == 2 
puts 8/3.floor == 2 
puts 2.67.ceil == 2 
puts 2.67.floor == 2 

결과 : 나의 이해에서

true 
true 
false 
true 

, ceil 숫자가 더 높은 반환해야하고 floor은 숫자 낮다. 누군가가이 사실을 깨달을 수 있기를 바랍니다. 고맙습니다! :)

답변

12

모든 것이 올바르게 반환됩니다. .보다 강한 결합 때문에,

(8.to_f/3).ceil == 2 #=> false 
(8.to_f/3).floor == 2 #=> true 
2.67.ceil == 2   #=> false 
2.67.floor == 2   #=> true 

또 다른 일을 8/3.ceil 실제로 8/(3.ceil)입니다 작성하는 데 있음을 염두에 부담 :

puts 8/3.ceil == 2 
#=> true, because 8/3 returns an Integer, 2 
puts 8/3.floor == 2 
#=> true, because 8/3 returns an Integer, 2 
puts 2.67.ceil == 2 
#=> false, because 2.67.ceil is 3 
puts 2.67.floor == 2 
#=> true, because true :) 

는 플로트하는 결과를 변환 할 수 있습니다, 여기에 더 의미의 일을 만들려면 /. , fdiv도 있습니다

부동 소수점 부문을 수행하는 즉 8.fdiv(3).ceil : (THX @tadman)

언급 할 또 다른 점은, (THX @Stefan)이 있다는 것입니다. 그리고 Ruby에는 Rational 클래스도 있습니다 : (8/3r).ceil.

+3

를 사용 shoue'8/(3.floor)'는'.'는'/'보다 더 강한 결합하기 때문이다. – tadman

+0

멋진 포인트를 얻으려고 tadman thx, Naswer를 편집했습니다 –

+0

Ahh 괜찮아! 그래서 첫 번째 라인에서는 실제로 3.ceil을 먼저 수행하여 3을 얻은 다음 8/3의 정수로 나눕니다. 따라서 세 번째 라인과 같이 3 (false) 대신 2 (true)가됩니다. 만약 내가 틀렸다면 나를 바로 잡아라. – misokuan

2

어쩌면 당신은`8/3.floor` 실제로 언급 할 가치도

(8.to_f/3).ceil == 2 
+1

그리고 이미 주어진 부분은? .. :) –

관련 문제