【发布时间】:2015-10-16 08:59:57
【问题描述】:
鉴于以下 R 下舍入毫秒的问题。我该如何解决它以使时间正确?
> options(digits.secs=3)
> as.POSIXlt("13:29:56.061", format='%H:%M:%OS', tz='UTC')
[1] "2012-06-07 13:29:56.060 UTC"
> as.POSIXlt("13:29:56.062", format='%H:%M:%OS', tz='UTC')
[1] "2012-06-07 13:29:56.061 UTC"
> as.POSIXlt("13:29:56.063", format='%H:%M:%OS', tz='UTC')
[1] "2012-06-07 13:29:56.063 UTC"
我注意到此 URL 提供了背景信息,但没有解决我的问题: Milliseconds puzzle when calling strptime in R.
此 URL 也涉及该问题但未解决该问题:R xts: .001 millisecond in index。
在这些情况下,我确实看到了以下内容:
> x <- as.POSIXlt("13:29:56.061", format='%H:%M:%OS', tz='UTC')
> print(as.numeric(x), digits=20)
[1] 1339075796.0610001087
该 URL 似乎也表明这只是一个显示问题,但我注意到使用诸如 "%OS3" 之类的语句而没有选项行似乎无法获取正确的位数。
我使用的版本是 Windows 下的 32 位 2.15.0 但在 R 的其他情况下似乎存在。
请注意,我的原始数据是 CSV 文件中的这些日期时间字符串,我必须找到一种方法将它们从字符串转换为正确的毫秒时间。
【问题讨论】:
-
这里使用 format() 是不必要的和分散注意力的。 . .
-
是的,但我们确实需要
format = '%H:%M:%OS'。 -
print(56.061, digits=20) #[1] 56.060999999999999943;您可以将 0.0001 秒添加到所有时间并获得更正的截断。浮点数的精度在 32 位和 64 位机器上应该是一样的。
标签: r time rounding milliseconds rounding-error