Ne, tamsayılar içinde eksprese olmaz gibi, herhangi bir geri kalanını siler tamsayı bölme, denir yapıyoruz mesela:
1/3 # == 0
Diğer katılımcıların da belirttiği gibi, bir kayan nokta bölümünü zorlayabilirsiniz. İlk argümanı bir float (1 burada) .to_f ile arayarak zorlamak zorundasınız. İkinci argüman otomatik kayan nokta sayıları taşınmaları sonrasında, sonuç, genel anlamda, tam artık olduğunu yani .:
1.to_f/3 # ~ 0.3333...
Not bir şamandıra coerced edilecektir. Bu yüzden ~ 0.333 koydu.
Kesin ayrıntılar daha fazla yer almaktadır. Bugünün mikroişlemcilerinde yaygın olan ikili kayan nokta aritmetiğinde, 2'nin gücü hala kesin.Fakat tamsayı 3, örneğin, tam olarak değil, sadece kayan nokta gösteriminin kesinliği içinde (tipik olarak 1E-16 veya "çift" doğruluk için) gösterilir.
Uzun lafın kısası, işte bir başparmak kuralı: Para değerleriyle uğraşıyorsanız, hassaslığın önemli olduğu durumlarda (bir telefon faturasında 1 cent fark var mı?) Hesaplanan sonuçları saklamayın ve değerleri kayan noktalarda depolar. Bunun yerine, tamsayı veya ondalık veri türlerini kullanın (dahili olarak dizeleri depolar). Kayan nokta hesaplamaları, mümkün ise yalnızca görüntüleme ve talep üzerine hesaplanır. Yüzdüklerinde büyük ve küçük değerleri bir araya getirmekten kaçının ve şamandıralardaki zincirleme hesaplamalarından kaçının. Sonuna kadar bölünmeleri önlemek için cebirinizi yeniden işleyin. Ruby ayrıca kesirleri tam olarak temsil eden ve yararlı olabilecek bir Rasyonel veri türünü destekler.
Bu sorunlar, ihtiyaç duyduğunuzda daha fazla bilgi arayabileceğiniz "kayan nokta hatası yayma" bilimi kapsamına girer.
Neden "BigDecimal"? Bu değerlerin sonuna kadar to_f 'yeterli olmaz mı? –