2012-01-31 35 views
34

Tôi đang cố gắng lấy phần còn lại của bộ phận bằng Ruby.Làm thế nào để tìm phần còn lại của một bộ phận trong Ruby?

Hãy nói rằng chúng tôi đang cố gắng để chia 208 bằng 11.

Trận chung kết sẽ là "18 với phần còn lại của 10" ... cuối cùng những gì tôi cần là 10.

Đây là những gì tôi đã có cho đến nay, nhưng nó chokes trong trường hợp sử dụng này (nói rằng phần còn lại là 0).

division = 208.to_f/11 
rounded = (division*10).ceil/10.0 
remainder = rounded.round(1).to_s.last.to_i 

Trả lời

64

Nhà điều hành modulo:

> 208 % 11 
=> 10 
+2

Làm cách nào để tôi thực hiện HECK phức tạp? Cảm ơn bạn. – Shpigford

+9

Tôi không muốn nitpick, nhưng nó không phải là một toán tử, nhưng một phương thức của lớp 'Fixnum':' >> 208.% (11) # => 10' –

+12

@MichaelKohl Về mặt kỹ thuật, tất cả các toán tử "ruby" là các phương thức . Ví dụ, '5 + 5' thực sự chỉ là viết tắt của' 5. + (5) '. – fbonetti

37

Nếu bạn cần chỉ là phần nguyên, số nguyên sử dụng với / điều hành, hoặc Numeric#div phương pháp:

quotient = 208/11 
#=> 18 

quotient = 208.0.div 11 
#=> 18 

Nếu bạn cần chỉ là phần còn lại, sử dụng toán tử % hoặc phương thức Numeric#modulo:

modulus = 208 % 11 
#=> 10 

modulus = 208.0.modulo 11 
#=> 10.0 

Nếu bạn cần cả hai, hãy sử dụng phương thức Numeric#divmod. Điều này thậm chí hoạt động nếu người nhận hoặc đối số là một phao:

quotient, modulus = 208.divmod(11) 
#=> [18, 10] 

208.0.divmod(11) 
#=> [18, 10.0] 

208.divmod(11.0) 
#=> [18, 10.0] 

Cũng quan tâm là phương pháp Numeric#remainder. Sự khác biệt giữa tất cả những điều này có thể được nhìn thấy trong documentation for divmod.

+6

+ 1 'divmod' là cách tôi đi. –

Các vấn đề liên quan