Python 2.5 中的 time.time() 以十进制显示

0 投票
3 回答
4591 浏览
提问于 2025-04-17 02:51

在Python 2.5中,能不能把time.time()的输出结果变成Decimal类型?

如果不行(只能是浮点数),那么有没有办法保证这个浮点数的误差总是比原来的值要大,而不是小?换句话说:

>>> repr(0.1)
'0.10000000000000001' # More than 0.1 which is what I want

>>> repr(0.99)
'0.98999999999999999' # Less than 0.99 which is unacceptable

代码示例:

import math, time

sleep_time = 0.1

while True:
  time_before = time.time()
  time.sleep(sleep_time)
  time_after = time.time()
  time_taken = time_after - time_before
  assert time_taken >= sleep_time, '%r < %r' % (time_taken, sleep_time)

编辑:

现在使用以下方法(在测试中没有失败,但理论上仍然可能失败):

import time
from decimal import Decimal

def to_dec(float_num):
  return Decimal('%2f' % float_num)

sleep_time = to_dec(0.1)

while True:
  time_before = to_dec(time.time())
  time.sleep(float(sleep_time))
  time_after = to_dec(time.time())
  time_taken = time_after - time_before
  assert time_taken >= sleep_time, '%r < %r' % (time_taken, sleep_time)
  print 'time_taken (%s) >= sleep_time (%s)' % (time_taken, sleep_time)

3 个回答

0

这是一个关于计时的功能,它需要在一个可能会暂停的调用之前和之后记录时间。所以,调用之后的时间减去调用之前的时间要大于等于暂停的时间,但这在使用浮点数时并不总是成立。

我觉得你的要求有点矛盾。你似乎想要两次调用同一个函数,第一次调用的结果要向下取整,而第二次调用的结果要向上取整。

如果我是你:

  1. 我会多次计时,而不是只计一次。
  2. 在得出任何结论时,我会考虑计时器的精度和任何浮点数的问题(如果相关的话)。
1

你可以这样格式化你的浮点数值:

>>> '%.2f' % 0.99
'0.99'

可以参考 Python的字符串格式化操作

3

你可以简单地把 time.time() 乘以一个值,这样就能得到你想要的精度(不过要注意,很多情况下调用这个函数也不能保证毫秒级的准确性)。所以,

startTime = int(time.time() * 100)
#...
endTime = int(time.time() * 100)

这样就能满足你想要的条件,即 endTime - startTime >= sleepTime

撰写回答