2009-12-19 15 views
47

Ist es möglich, die Anzeigegenauigkeit eines Floats in Ruby festzulegen?Legen Sie die Anzeigegenauigkeit eines Floats in Ruby fest

Etwas wie:

z = 1/3 
z.to_s #=> 0.33333333333333 
z.to_s(3) #=> 0.333 
z.to_s(5) #=> 0.33333 

Oder muss ich die to_s Methode von Float außer Kraft setzen?

+0

verwenden Was ist 'X'? ... –

+0

Sorry, x war ein Tippfehler. –

+10

Wie wäre es mit z.round (2), z.round (3)? – v4r

Antwort

34

können Sie verwenden sprintf:

sprintf("%0.02f", 123.4564564) 
+4

Ich bevorzuge dies für Zeiten, wenn ich die ".00" will, dass 'Runde (2)' nicht geben. –

+9

Das ist irgendwie amüsant, ich habe nie Ruby in meinem Leben benutzt. Ich weiß nicht, wie man ein Hallo Weltprogramm schreibt und hat es nie getan. Ich habe wahrscheinlich nur die Frage des OP gegoogelt und die Antwort gepostet. –

+0

'puts" Hallo, Welt "' - Haha! Jetzt wissen Sie, wie man ein Hallo Weltprogramm schreibt! –

32

ich normalerweise tun würde nur die Umwandlung in offenen Code, so etwas wie:

puts "%5.2f" % [1.0/3.0] 

Rubin nennt Kernel#format für Ausdrücke wie diese, weil String hat eine core operator % defined darauf. Stellen Sie es sich als printf für Ruby vor, wenn das irgendwelche Glocken für Sie klingelt.

+8

Kann das jemand erklären? – you786

+0

Überprüfen Sie 'Kernel # Format'. – maletor

+0

dieser gab mir eine führende Weltraumfigur. Ich habe Andreas Antwort verwendet und es ohne den Leerzeichen-Charakter gemacht. Ich konnte die Dokumentation zu diesem Thema nicht verstehen, sonst würde ich erklären, warum lol –

59

z.round(2) oder x.round(3) ist die einfachste Lösung. Siehe http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round.

Das heißt, das wird nur sicherstellen, dass es nicht mehr als das viele Ziffern ist. Im Fall von 1/3 ist das in Ordnung, aber wenn Sie 0.25.round(3) sagen, erhalten Sie 0,25, nicht 0,250.

+1

FYI, das wurde in Ruby 1.9.2 hinzugefügt, so wird es nicht mit früheren Versionen – nbarraille

+1

+1 für den Hinweis über '(0,25) funktionieren. Runde (3) 'nicht nachgebend '0.250' Siehe Andreas Boninis Antwort für einen Weg dahin. –

0

können Sie puts

z = #{'%.3f' % z} 
Verwandte Themen