2012-10-25 10 views
6

Ich möchte eine BigDecimal in Rubin runden. Ich weiß, dass ich die Runde Funktion können Sie aberRuby Big Dezimal Rundung mit fester Nummer

die Rundenfunktion gibt

(3.2).round(2) => 3.2 

Ich möchte

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

ich immer zwei Dezimalstellen haben wollen, 3,20 nicht 3.2

alle Idee, wie man das schafft?

Antwort

15

versuchen Sie dies:

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

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

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

etc. 
+0

danke .. das ist Spot auf – Abid

5

Anders als zum Beispiel Java's BigDecimal, Ruby's BigDecimal keine Präzision pro Instanz hat. Der Unterschied zwischen 3.2 und 3.20 in einem Ruby BigDecimal ist nur Formatierung.

+0

Ich kenne keine Java, also bin ich wahrscheinlich Missverständnis. In manchen Fällen ist es jedoch in Ruby obligatorisch, eine Genauigkeit für eine BigDecimal-Instanz anzugeben: 'require 'bigdecimal'; BigDecimal.new (1/3.0) 'Fehler: Genauigkeit kann für Rational nicht weggelassen werden. – steenslag

+0

Wahr, aber diese Anzahl signifikanter Stellen wird nur zum Abrufen des Anfangswerts verwendet. Es ist nicht an diese Instanz "gebunden". 'require 'bigdecimal'; dec = BigDecimal.new (2,345, 2); dec.precs # => [18, 36] 'und' dec.to_s ('F') # => "2.3" ' –