Wie zählt man die Anzahl der Dezimalstellen in einem Float?

8

Ich verwende Ruby 1.8.7 und Rails 2.3.5.

Wenn ich einen Float wie 12.525 habe, wie kann ich die Anzahl der Stellen hinter der Dezimalstelle erhalten? In diesem Fall erwarte ich eine '3' zurück.

    
Reno 21.12.2011, 23:35
quelle

6 Antworten

9

Hier ist ein sehr einfacher Ansatz. Verfolgen Sie, wie oft Sie die Zahl um 10 multiplizieren müssen, bevor sie der entsprechenden Ganzzahl entspricht:

%Vor%     
Matt Greer 21.12.2011, 23:42
quelle
17

So ungefähr, denke ich:

%Vor%     
Oleksandr Skrypnyk 21.12.2011 23:41
quelle
15

Sie sollten sehr vorsichtig sein mit dem, was Sie wollen. Fließkommazahlen eignen sich hervorragend für wissenschaftliche Zwecke und funktionieren meistens im täglichen Gebrauch, aber sie zerfallen ziemlich stark, wenn Sie etwas wissen wollen wie "wie viele Stellen hinter der Dezimalstelle" - nur, weil sie insgesamt etwa 16 Stellen haben , nicht alle davon enthält genaue Daten für Ihre Berechnung. (Oder, einige Bibliotheken könnten beim Formatieren einer Zahl für die Ausgabe tatsächlich genaue Daten gegen das Ende der Zahl wegwerfen, mit der Begründung, dass "gerundete Zahlen freundlicher sind". Was, obwohl oft zutreffend, bedeutet, dass es ein bisschen gefährlich sein kann verlassen sich auf formatierte Ausgabe.)

Wenn Sie die Standard-Gleitkommazahlen durch die Klasse BigDecimal ersetzen können, um beliebig genaue Gleitkommazahlen zu erhalten, können Sie die "rohe" Zahl überprüfen:

%Vor%

Natürlich, wenn der Wechsel zu BigDecimal Ihre Anwendung zu langsam macht oder offensichtlich zu mächtig für das ist, was Sie benötigen, könnte dies Ihren Code übermäßig komplizieren, ohne dass Sie davon profitieren. Sie müssen entscheiden, was für Ihre Anwendung am wichtigsten ist.

    
sarnold 22.12.2011 00:01
quelle
2

Gefällt mir:

%Vor%

Es ist nicht sehr hübsch, aber Sie können es als eine Methode für Float einfügen:

%Vor%     
Linuxios 21.12.2011 23:40
quelle
0

Können Sie den Boden subtrahieren und dann einfach zählen, wie viele Zeichen noch übrig sind?

(12.525 - (12.525.floor)). to_s.length-2 = & gt; 3

edit: nein das funktioniert nicht für eine Reihe von Gründen, negative und 0.99999 Probleme

    
daniel 21.12.2011 23:50
quelle
0

Olexandrs Antwort funktioniert nicht für Integer. Kann Folgendes versuchen:

%Vor%     
Alex 01.02.2013 04:52
quelle

Tags und Links