2016-06-21 9 views
0

Wie kann man die Dezimal-Werte eines Floats erhalten und in Ruby in eine ganze Zahl verwandeln?Wie float Dezimal-Werte in Rubine in Integer

Hier ist, wie weit habe ich bisher:

number = 12.55 
decimal_length = number.to_s.split('.')[1].size #=> 2 
decimal = number.divmod(1)[1].round(decimal_length) #=> 0.55 

Hier ist, wie kann ich Dezimalzahlen in integer drehen (55) in einer Weise, dass es mit einer beliebigen Anzahl als Eingabe funktionieren würde?

+2

Warum 55 hilfreich sein? Was ist wenn dein Wert 2,3 ist? Ist das 3 oder 30? Wird 2.909 in 90 oder 909 konvertiert? – tadman

+0

Nein. aber als @ Mike sagte, ich habe nur extra Arbeit für meinen Zweck! – fardin

Antwort

1

Vielleicht bin ich ein Missverständnis? Aber du hast es, du machst nur zusätzliche Arbeit.

number = 12.55 
number.to_s.split('.')[1].to_i 
# => 55 
+0

In einen String konvertieren und diesen dann in ein Array aufteilen, etwas aus einem Array herausziehen und dieses wieder in eine ganze Zahl konvertieren, ist komplett verrückt. 'Float # to_i' macht es auf einem Schritt. – tadman

+0

@tadman vielleicht könnten Sie ein Beispiel für 'Float # to_i' liefern. Wenn ich 'Float (12.55) .to_i' mache, ist das Ergebnis '12'. –

+0

Das Problem hier ist '2.09' kommt mit' 9' als Antwort heraus. Das würde zu den gleichen Ergebnissen wie "2,9" führen. Da Fliesskommazahlen oft als 12.55000000190239012 rendern, wird dies einige sehr verrückte Ergebnisse liefern. – tadman

1

Sie können number.to_i verwenden, um die ganze Zahl zu erhalten. Um den Dezimalwert zu erhalten, können Sie tun number%1

number.to_i => 12 
    number%1 => 0.5500000000000007 
+0

Dies beantwortet die Frage nicht. –

+0

@Mike Was ist damit nicht beantwortet? Ich habe zur Klärung der Frage gebeten, die erforderliche Integerzahl ist wirklich mehrdeutig. – tadman

+0

@tadman Ihr Kommentar zur Klärung war gut, aber die ursprüngliche Frage bot ein Beispiel. Insbesondere sollte "12.55" zu "55" werden. Diese Antwort liefert eine Zeile, die "12.55" in "12" ändert, und eine andere, die "12.55" in "0.5500000000000007" ändert. Was die Frage auch nicht wollte. –

0

wenig Posting spät, aber ich bin der Hoffnung, es könnte

decimal_length = n.to_s.split(".").last.size # 2 
decimal = (n.abs.modulo(1)*10**decimal_length).round # 55