2012-02-07 38 views
11

Nếu tôi có float như 3,75, làm thế nào tôi có thể chia nó thành số nguyên 3 và float 0,75?Chia phao thành số nguyên và số thập phân trong Ruby

Tôi có phải chuyển đổi phao thành một chuỗi, và sau đó chia chuỗi bằng ".", Và sau đó chuyển đổi các phần thành số nguyên và nổi một lần nữa, hoặc là có một thanh lịch hơn hoặc "đúng" cách để làm điều này ?

Trả lời

13

Như đã đề cập, bạn có thể sử dụng 3.75.to_i để có được những số nguyên. Cách khác để nhận phần còn lại là sử dụng toán tử % ví dụ: 3.75 % 1

+0

Xin cảm ơn! Cảm ơn tất cả! –

+0

đó là một giải pháp khôn ngoan :) nó cũng tốt cho tôi;) –

16

Bạn có thể sử dụng Numeric#divmod với lập luận 1 cho việc này:

Trả về một mảng chứa các thương và mô đun thu được bằng cách chia num bởi số.

a.divmod 1 
=> [3, 0.75] 

Nếu bạn muốn nhận được giá trị chính xác, phương pháp này hiện có sẵn cho BigDecimal cũng như:

3.456.divmod 1 
=> [3, 0.45599999999999996] 

require 'bigdecimal' 
div_mod = BigDecimal("3.456").divmod 1 
[div_mod[0].to_i, div_mod[1].to_f] 
=> [3, 0.456] 
+0

+1, tôi không quen với phương pháp này. Cảm ơn các liên kết. – Gazler

+2

Lưu ý rằng giải pháp này khác với giải pháp được chấp nhận cho các số âm. '-3.75.to_i # => -3', và' -3.75.divmod 1 # => [-4, 0.25] ' –

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