次のパターンの文字列があります
"00:00:30.04,"
この文字列をフロートに解析する最もスマートな方法はどれですか?
最高、フィル
p "00:00:30.04,"[6,5].to_f # 30.04
p Float("00:00:30.04,"[6,5]) # 30.04
p "abcdefg"[6,5].to_f # 0.0
p Float("abcdefg"[6,5]) #ArgumentError
基本的に: 位置 6 から始まる長さ 5 の部分文字列を取得し、それに基づいて float を返します。Float
より厳しいString.to_f
です。
s = "00:00:30.04,"
s.split(/[^\deE\.+-]/).map(&:to_f) # => [0.0, 0.0, 30.04]
区切り文字が常にコロンまたはコンマの場合、次を使用できます。
"00:00:30.04,".split(/:|,/).map(&:to_f) #=> [0.0, 0.0, 30.04]
そこに3つの数字があります。それらを分割し、各文字列で単純に呼び出します#to_f
(「フロートする」ことを意味します)。
string = "00:00:30.04,"
strings = string.split ":"
numbers = strings.map { |s| s.to_f }
numbers # => [0.0, 0.0, 30.04]