Python 2.5 time.time()为十进制

时间:2011-09-22 15:30:12

标签: python

是否可以在Python 2.5中以timeimal形式接收time.time()的输出?

如果不是(并且它必须是浮点数),那么是否可以保证不准确性总是大于(而不是小于)原始值。换句话说:

>>> 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 :(得分:2)

您可以通过一些值简单地多个time.time()来获得您想要的精度(请注意,许多调用无论如何都不能保证亚秒精度)。所以,

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

满足endTime - startTime >= sleepTime

的条件

答案 1 :(得分:1)

您可以将浮点值格式化为:

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

请参阅Python's String Formatting Operations

答案 2 :(得分:0)

  

用于定时功能,需要记录可能睡眠的呼叫之前和之后的时间。因此,在&gt; =睡眠时间之前的时间之后,浮动的情况并非总是如此。

我认为您的要求不一致。您似乎想要两次调用相同的函数,并且第一次调用结果向下,第二次调用将结果向上调整

如果我是你:

  1. 我会打电话而不是一次。
  2. 在得出任何结论时,我会考虑计时器的解决方案和任何浮点问题(如果相关)。