2014-01-07 5 views
7

Ich versuche, meine Konsole zu drucken, um eine Summe meiner Preise meiner Standorte-Preisliste zu drucken.Convert Big Decimal in String in der Rails-Konsole

Ich versuche, diese Aufgabe über die Konsole abzuschließen, aber ein BigDecimal als Ergebnis erhalten. Festhalten daran, wie dieses Ergebnis in eine lesbare Zeichenfolge oder Ganzzahl umgewandelt wird.

Ergebnisse:

Location.pluck(:rate_card).sum 
     => "#<BigDecimal:7f7cf347edd0,'0.3091675E6',18(36)>" 

In meinem Ort 'Index', einen Dollar-Betrag in der Lage sein zu sehen, habe ich dieses Setup als:

<%= number_to_currency(location.rate_card, :precision => 2) %> 

TIA

Antwort

9
Location.each do |e| 
    puts e.rate_card.to_s.to_f.round(2) 
end 
3

Sie sehen, dass :rate_card als BigDecimal zurückgegeben wird, da dies in Ihrem Datenbankschema definiert ist. Wenn Sie Location.rate_card.class in einer Rails-Konsole ausgeben, sehen Sie => BigDecimal.

Wie von @Darby erwähnt, können Sie round verwenden. In einer Konsole, Ausgabe Location.pluck(:rate_card).sum.round(2) und das sollte das gewünschte Ergebnis korrekt gerundet zeigen.

Schließlich gibt es eine Bedeutung für den zweiten Teil Ihrer Ergebnisse? Sie zeigen den Code an, den Sie verwenden, um den Ansichtscode richtig anzuzeigen, aber ich glaube nicht, dass er Ihre Frage beeinflusst.

1

Ein BigDecimal kann in eine Zeichenkette wie diese konvertiert werden.

pry(main)> b = BigDecimal.new('78.23') 
=> #<BigDecimal:7ff0119cab68,'0.7823E2',18(18)> 
[37] pry(main)> b.to_s 
=> "0.7823E2" 

Sie müssen dies nicht zuerst in einen String und dann in einen Float ändern. to_f ist für ein BigDecimal-Objekt definiert.

[34] pry(main)> b.to_f 
=> 78.23 

Es gibt auch to_i und to_r für ganze Zahlen und rationals sind.