【发布时间】:2020-04-13 06:39:57
【问题描述】:
我有一个以毫秒为单位的时间戳,我想将其转换为 UTC 格式的 ISO 日期字符串:
require 'time'
timestamp = 1534442471123
puts Time.at(timestamp / 1000.0).utc.strftime('%FT%T.%3NZ')
哪个输出:
2018-08-16T18:01:11.122Z
为什么会延迟 1 毫秒(...122Z,而不是 ...123Z)?
这是因为浮点数内存表示问题吗?
【问题讨论】:
-
usual definition of floating point 表示以 2 为底的指数。因此,您不能可靠地除以 1000。如果您只是计算一些
x/1000.0并打印结果,您可能不会注意到错误,因为它在舍入/格式化期间得到补偿。如果您需要精确的结果,请避免使用浮点运算。