2012-10-25 7 views
6

Voglio arrotondare uno BigDecimal rubino. So che posso utilizzare la funzione di turno, maRuby Big Decimal Rounding con numero fisso

la funzione di turno dà

(3.2).round(2) => 3.2 

voglio

(3.2).round(2) => 3.20 
(3.20).round(2) => 3.20 
(3).round(2) => 3.00 
(3.578).round(2) => 3.58 

ho sempre voglia di avere 2 cifre decimali, 3.20 non 3.2

eventuali idea di come ottenere questo risultato?

risposta

15

provare questo:

'%.2f' % 3.2 
=> "3.20" 

'%.2f' % 3 
=> "3.00" 

'%.2f' % 3.578 
=> "3.58" 

etc. 
+0

grazie .. Questo è lo spot su – Abid

5

A differenza, per esempio, Java's BigDecimal, Ruby's BigDecimal non hai di precisione per ogni istanza. La differenza tra 3,2 e 3,20 in un Ruby BigDecimal è solo la formattazione.

+0

Non conosco alcun Java quindi probabilmente sto fraintendendo. Ma in alcuni casi in Ruby è obbligatorio specificare una precisione per un'istanza BigDecimal: 'require 'bigdecimal'; Errore di BigDecimal.new (1/3.0): impossibile omettere la precisione per un Rational. – steenslag

+0

Vero, ma quel numero di cifre significative è appena usato per ottenere il valore iniziale. Non è "bloccato" in quell'istanza. 'richiede 'bigdecimal'; dec = BigDecimal.new (2.345, 2); dec.precs # => [18, 36] 'e' dec.to_s ('F') # => "2.3" ' –