2016-12-07 8 views
0

К примеру, у меня есть время данные с форматом строки:Как преобразовать время в bigdecimal с ruby?

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), чтобы вернуть большое десятичное значение: 'require 'bigdecimal'; BigDecimal.new (h * 3600 + m * 60 + s + ms/1000) # => # '. –

+0

Извините, здесь '; 16' означает timecode. Знаете ли вы, как изменить его на второй? –

Смежные вопросы