是否可以在Python 2.5中将time.time()的输出作为Decimal接收?Python 2.5 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)
为了帮助我们给予合理的答案,你能解释这背后要求的真正目的是什么? – NPE
这是一个定时功能,需要在可能睡眠的呼叫前后注册一个时间。所以'在睡眠时间>之前的时间之后断言 - 浮动并不总是这种情况。记住time.time()给你一个浮点数。 – Metalshark