2010-06-23 35 views
6

Ondalık olarak ActiveRecord sütun türünüzü belirtirseniz, Rails bu veritabanı değerini Ruby BigDecimal nesnesi olarak döndürür.Ruby On Rails onlu sütun

Sorum şu: Bu alanlar ile çalışırken ve bunlara ek matematik uygularken, hesaplamalarımda her zaman BigDecimal değerleri kullanmalı mıyım yoksa kullanılacak kayan nokta değerleri mi kullanmalıyım? BigDecimal değerleri ve Floating Point değerlerini aynı hesaplamalarda karıştırmanın iyi bir uygulama olup olmadığını bilmiyordum.

Karışık Örnek: BigDecimal.new ('12 .43 ')/4.2

aynı tip Örnek: BigDecimal.new ('12 .43')/BigDecimal.new ('4.2')

Bunu sormamın sebebi çünkü ondalık doğrulukta ihtiyacım olduğu için yüzer kullanmaktan utangaç bir silahım. 0.1 + 0.7, yüzdürme kullanılarak 0,8 eşit olmayacaktır.

cevap

2

Eğer

... şamandıralar kullanılmadan utangaç biraz silahı ...

kullanım BigDecimal olduğundan beri. Çalışıyor

+1

Evet, BigDecimal kullanmalıyım. Sorum şu: Hesaplamalardaki tüm sayılar için BigDecimal kullanmalı mıyım? Bazı testler yaptım ve bu BigDecimal.new ('1.2') + 1.1 yaparsanız, dönüş değeri bir BigDecimal değil bir float olacaktır. Bu nedenle, BigDecimal'i dahili olarak kullandığından, ActiveRecords Ondalık sütunuyla çalışırken tüm BigDecimal sayılarını kullanmak en iyi yöntemdir, bu yüzden hesaplamalarınızı garip bir float yuvarlama sorununa dönüştürmeyebilirsiniz. – Dale

+0

Re: BigDecimal.new ('1.2') + 1.1 float döndürür. Haklısın. Bu durumda, yalnızca BigDecimal nesnelerle çalışmayı unutmayın. Sadece çıktı vermek istediğinizde dönüştürün. –

+0

Ayrıca, BigDecimal.new ('0.0') yerine 0 değerini kullanmayı unutmayın. –