Ruby转换为字符串时减去一微秒

时间:2019-02-24 07:36:55

标签: ruby

我有一个字符串时间戳:

ts = '1550989255.000300'

如何将tsTime对象中的Datetime解析为t,并正确打印t.strftime('%6N')

我做到了:

t = Time.at(ts.to_f)
t.strftime '%6N' #=> "000299"

将时间戳转换为字符串时,Ruby会砍掉一微秒。

3 个答案:

答案 0 :(得分:4)

您正在观察浮点数学错误。如果需要更高的精度,则应使用BigDecimal

require 'bigdecimal'

ts = BigDecimal('1550989255.000300')
t  = Time.at(ts)
t.strftime '%6N'

=> "000300"

答案 1 :(得分:2)

比浮点数更精确,并且在Ruby中越来越多地使用它们。

ts = '1550989255.000300'
t  = Time.at(ts.to_r)  # to_r: a rational
p t.strftime '%6N'     # => "000300"

答案 2 :(得分:1)

这有效:

ts = "1550989255.000300"
arr = ts.split('.')
t = Time.at(arr[0].to_i, arr[1].to_i)
t.strftime '%6N'