2016-12-07 10 views
0

例えば、私は文字列形式で時刻データを持っている:ruby​​でbigdecimalに時間を変換するには?

00:25:23;16 

私はBigDecimalに変換したいとしようとした:

a = '00:25:23;16'.to_d 
=> #<BigDecimal:96cb548,'0.0',9(18)> 

を私がチェックした場合:

a.floor 
=> 0 

それは本当の価値ではないようです。次に、それを正しい方法に変換する方法は?

追加私はこのようなBigDecimalの値は(そうでないかもしれない右の値)が期待

1543.123 
+0

どのような出力を期待していますか? UNIXタイムスタンプ? ';'( '; 16')の後の部分は何ですか? – Carpetsmoker

+0

@Carpetsmoker私はこのフォーマットのようなデータを期待しています: '1543.123'(正しい値ではありません)。 –

+0

サンプル文字列に必要な結果を表示すると便利です。 –

答えて

2

と仮定;16はその後、ミリ秒を意味し、多分あなたは、この探していますか?

> str = "00:25:23;16" 
=> "00:25:23;16" 
> h, m, s, ms = str.split(/[:;]/).map(&:to_f) 
=> [0.0, 25.0, 23.0, 16.0] 
> h * 3600 + m * 60 + s + ms/1000 
=> 1523.016 
+0

ありがとうございます。それは私が欲しいものです。それは少し複雑に思えます、私は今それを使用することができます:) –

+0

... [BigDecimal :: new](https://ruby-doc.org/stdlib-2.3.0/libdoc/bigdecimal/rdoc/BigDecimal .html#method-c-new)を使ってBig Decimalを返します: 'require 'bigdecimal'; BigDecimal.new(h * 3600 + m * 60 + s + ms/1000)#=># ' –

+0

申し訳ありません、ここで '; 16 'はタイムコードを意味します。だから、それを第二に変える方法を知っていますか? –

関連する問題