2016-10-05 2 views
1

레일 4.2.7을 사용하고 있습니다. 나는 두 번째 (소수 장소) 1/10이있는 경우 위의 계정을 인계하지 않습니다 ...소수점 자리를 고려하여 시간 변환 함수를 작성하려면 어떻게해야합니까?

def duration_in_milliseconds(input) 
    if input 
     input.split(':').map(&:to_i).inject(0) { |a, b| a * 60 + b } * 1000 
    else 
     0 
    end 
    end 

문제는 밀리 초에 (지속 시간을 나타내는 의미) 문자열을 변환하는이 기능을 가지고있다. 따라서이 인수 "19 : 14.1"을 전달하는 것은이 인수 "19:14"를 전달하는 것과 동일한 결과를 얻습니다. 소수점 이하의 길이 부분을 차지하도록 위의 내용을 어떻게 조정할 수 있습니까?

답변

1

그냥 정수 대신 처리하면서 플로트로 변환 :

def duration_in_milliseconds(input) 
    if input 
     input.split(':').map(&:to_f).inject(0) { |a, b| a * 60 + b } * 1000 
    else 
     0 
    end 
    end 

duration_in_milliseconds('19:14') 
#=> 1154000.0 
duration_in_milliseconds('19:14.1') 
#=> 1154100.0 
관련 문제