2010-06-23 5 views
6

Wenn Sie Ihren Activespaltentyp angeben dezimal zu sein, Rails zurückkehren wird, dass die Datenbankwert als Objekt Rubin BigDecimal.Ruby on Rails dezimal Spalte

Meine Frage ist, wenn sie mit diesen Feldern und Ausführen einer zusätzlichen Mathematik an ihnen arbeiten, sollte ich immer BigDecimal Werte in meinen Berechnungen oder Fließkommawerte in Ordnung zu verwenden verwenden. Ich wusste nicht, ob es eine gute Übung ist, BigDecimal-Werte und Gleitkommawerte in denselben Berechnungen zu mischen.

Mixed Beispiel: BigDecimal.new ('12 .43 ')/4.2

Gleicher Typ Beispiel: BigDecimal.new ('12 .43')/BigDecimal.new ('4.2')

Der Grund, warum ich frage ist, weil ich ein wenig Pistole schüchtern von der Verwendung von Schwimmer bin, weil ich Dezimalgenauigkeit brauche. 0.1 + 0.7 ist nicht gleich 0.8 mit floats.

Antwort

2

Da Sie

... ein wenig Pistole schüchtern Flöße mit ...

Verwendung BigDecimal. Adaequat

+1

Ja, ich denke, ich sollte BigDecimal werden. Meine Frage ist, sollte ich BigDecimal für alle Zahlen in den Berechnungen verwenden. Ich habe einige Tests und wenn Sie diese BigDecimal.new tun (‚1.2‘) + 1.1 der Rückgabewert wird ein Schwimmer kein BigDecimal sein. So ist es am beste Praxis alle BigDecimal Zahlen zu verwenden, wenn sie mit ActiveRecords Dezimal Spalte zu tun, da es BigDecimal intern verwendet, damit Sie nicht Ihre Berechnung riskieren ein seltsames Schwimmer Rundungs ​​Problem laufen in? – Dale

+0

Re: BigDecimal.new ('1.2') + 1.1 kehrt schweben. Du hast recht. Da dies der Fall ist, sollten Sie nur mit BigDecimal-Objekten arbeiten. Konvertieren Sie nur, wenn Sie es ausgeben möchten. –

+0

Denken Sie auch daran, BigDecimal.new ('0.0') anstelle von 0 zu verwenden. –