2016-06-21 10 views
0

浮動小数点の10進値を取得してルビの整数に変換するにはどうすればよいですか?浮動小数点値をルビの整数に変換する方法

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

をここに私はそれを入力として、任意の数で動作することを方法で、整数(55)に、小数点を有効にする方法:ここでは

は、私がこれまでに得たどのくらいいるのですか?

+2

なぜ55であるかもしれない願っていますか?あなたの価値が2.3の場合はどうなりますか?それは3か30か? 2.909は90または909に変換されますか? – tadman

+0

Nope。 @mikeが私の目的のために余分な仕事をしていると言ったので! – fardin

答えて

1

多分私は誤解ですか?しかし、あなたは余分な仕事をしているだけです。

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

文字列に変換し、それを配列に分割し、配列から何かを取り出して、それを整数に変換するのは全く不可能です。 'Float#to_i'はそれを1ステップで行います。 – tadman

+0

@tadmanおそらく 'Float#to_i'の例を提供することができます。私が 'Float(12.55).to_i'を実行すると結果は' 12'になります。 –

+0

ここでの問題は、 '2.09'が答えとして' 9'で出てくることです。それは '2.9'と同じ結果を与えるでしょう。さらに、浮動小数点数がしばしば '12.55000000190239012'とどのようにレンダリングされるかを考えると、これはいくつかの非常にクレイジーな結果を生み出すでしょう。 – tadman

1

number.to_iを使用して整数を取得できます。 10進値を取得するには、少し遅れて投稿number%1

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

これは質問に答えません。 –

+0

@Mikeそれはどう答えられていないのですか?私は質問の明確化を求めました。必要な整数は本当にあいまいです。 – tadman

+0

@tadman説明のためのあなたのコメントは良かったが、元の質問は一例を提示した。具体的には、「12.55」は「55」になるはずです。この回答は、 '12.55'を' 12'に変更する行と '12.55'を' 0.5500000000000007 'に変更する行を提供します。問題が望んでいたこともありません。 –

0

を行うことができますが、私はそれが参考に

decimal_length = n.to_s.split(".").last.size # 2 
decimal = (n.abs.modulo(1)*10**decimal_length).round # 55 
関連する問題