Sebagai contoh:
9 / 5 #=> 1
tapi saya harapkan 1.8
. Bagaimana saya bisa mendapatkan hasil desimal (non-integer) yang benar? Mengapa itu kembali 1
sama sekali?
Sebagai contoh:
9 / 5 #=> 1
tapi saya harapkan 1.8
. Bagaimana saya bisa mendapatkan hasil desimal (non-integer) yang benar? Mengapa itu kembali 1
sama sekali?
def method; a - b/8; end
akan mengembalikan hasil perhitungan dari metode, karena ekspresi terakhir dalam pemanggilan metode adalah nilai kembali.Jawaban:
Itu melakukan pembagian integer. Anda dapat membuat salah satu angka
Float
dengan menambahkan.0
:sumber
.to_f
jawabannya adalah lebih baik jika Anda membagi dua variabel yang berisi bilangan bulat, misalnyaa.to_f / b
. Jika Anda benar-benar membagi dua integer hard-coded (yang mungkin aneh), maka menggunakan9.0 / 5
tidak apa-apa.Itu melakukan pembagian integer. Anda dapat menggunakan
to_f
untuk memaksa sesuatu ke mode floating-point:Ini juga berfungsi jika nilai Anda adalah variabel, bukan literal. Mengubah satu nilai ke float sudah cukup untuk memaksa seluruh ekspresi ke aritmatika floating point.
sumber
Ada juga
Numeric#fdiv
metode yang bisa Anda gunakan sebagai gantinya:sumber
Anda dapat memeriksanya dengan irb:
sumber
Anda bisa memasukkan ruby
mathn
modul .Dengan cara ini, Anda akan dapat membuat pembagian secara normal.
Dengan cara ini, Anda mendapatkan pembagian yang tepat (kelas Rasional) hingga Anda memutuskan untuk menerapkan operasi yang tidak dapat dinyatakan sebagai rasional, misalnya
Math.sin
.sumber
Ubah
5
ke5.0
. Anda mendapatkan pembagian bilangan bulat.sumber
Fixnum # to_r tidak disebutkan di sini, diperkenalkan sejak ruby 1.9. Ini mengubah Fixnum menjadi bentuk rasional. Di bawah ini adalah contoh penggunaannya. Ini juga dapat memberikan pembagian yang tepat selama semua angka yang digunakan adalah Fixnum.
Contoh di mana float dioperasikan pada bilangan rasional menutupi hasil ke float.
sumber