我想转换字幕时间代码:
begin="00:00:07.71" dur="00:00:03.67
至纯秒:
begin=7.1 end=11.38
我写了一个Ruby代码:
def to_sec(value)
a = value.split(':')
a[0].to_i*3600+a[1].to_i*60+a[2].to_f
end
从而产生CCD_ 1。有人能告诉我为什么会发生这种事吗?有没有时间库可以进行这种转换?
将底层数据类型表示为百分之整数秒(厘秒)可能是最简单的:
def to_csec(value) #if you had CSec < Integer this would be `def self.[](value)`
a = value.split(':')
#tacking on a couple zeros to each
a[0].to_i*360000+a[1].to_i*6000+(a[2].to_f * 100).to_i
end
你可以添加一些助手来处理持续时间,并漂亮地打印它们:
def csec_to_s(csec) #if you had CSec < Integer, this would be `def to_sec`
"%.2f" % (csec.to_f / 100)
end
class SubtitleDuration < Range
def initialize(a,b)
centi_a = to_csec(a)
super(centi_a,to_csec(b) + centi_a)
end
def to_s
"begin=#{csec_to_s(self.begin)} end=#{csec_to_s(self.end) }"
end
end
那么你的答案就是:
puts SubtitleDuration.new("00:00:07.71", "00:00:03.67").to_s
#=> begin=7.71 end=11.38
这类事情几乎可以在任何编程语言中发生。这是因为浮点数是如何表示的。它们不是以小数形式存储在引擎盖下的,所以有时你会遇到这样的奇怪舍入错误。