Wie richte ich einen Float auf eine bestimmte Anzahl von signifikanten Stellen in Ruby?

8

Es wäre schön, ein Äquivalent von Rs signif zu haben Ruby.

Zum Beispiel:

%Vor%     
Aleksandr Levchuk 05.12.2011, 08:24
quelle

7 Antworten

13

Es gibt wahrscheinlich einen besseren Weg, aber das scheint gut zu funktionieren:

%Vor%     
Victor Deryagin 05.12.2011 13:57
quelle
3

Einige der vorherigen Antworten und Kommentare haben auf diese Lösung angespielt, aber das hat bei mir funktioniert:

%Vor%     
radhika 25.11.2014 15:05
quelle
2

Ich sehe in Float nichts dergleichen. Float ist meistens ein Wrapper für den nativen double -Typ und angesichts der üblichen binären / dezimalen Probleme bin ich nicht so überrascht, dass Float es nicht erlaubt, die signifikanten Ziffern zu manipulieren.

BigDecimal in der Standardbibliothek versteht jedoch Signifikante Ziffern, aber ich sehe nichts, was Ihnen erlaubt, die signifikanten Ziffern in einem BigDecimal direkt zu ändern: Sie können danach fragen, aber Sie können es nicht ändern. Sie können dies jedoch umgehen, indem Sie eine No-Op-Version der Methoden mult oder add verwenden:

%Vor%

Das zweite Argument dieser Methoden:

  

Wenn angegeben und kleiner als die Anzahl der signifikanten Stellen des Ergebnisses, wird das Ergebnis entsprechend BigDecimal.mode auf diese Anzahl von Stellen gerundet.

Die Verwendung von BigDecimal ist zwar langsamer, aber möglicherweise die einzige Wahl, wenn Sie feingranulare Steuerung benötigen oder wenn Sie die üblichen Gleitkomma-Probleme vermeiden müssen.

    
mu is too short 05.12.2011 09:18
quelle
2

Sie suchen wahrscheinlich nach Rubys Decimal .

Sie könnten dann schreiben:

%Vor%

Oder wenn Sie die gleiche Syntax verwenden möchten, fügen Sie dies als Funktion zum Float der Klasse hinzu:

%Vor%

Die Verwendung wäre dann dieselbe, d. h.

%Vor%

Um es zu verwenden, installiere den Edelstein

%Vor%     
dgasper 05.12.2011 10:25
quelle
1

Hier ist eine Implementierung, die keine Strings oder andere Bibliotheken verwendet.

%Vor%     
Bravoking 03.07.2017 18:19
quelle
0

@ Blou91's Antwort ist fast da, aber es gibt eine Zeichenkette anstelle eines Floats zurück. Dies funktioniert für mich:

%Vor%

Also als Funktion,

%Vor%     
habudu 20.06.2017 16:33
quelle
-1

Verwenden Sie sprintf, wenn Sie nachgestellte Nullen drucken möchten

%Vor%     
Blou91 08.06.2014 00:18
quelle