Python 2.5 中的 time.time() 以十进制显示
在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
3
你可以简单地把 time.time()
乘以一个值,这样就能得到你想要的精度(不过要注意,很多情况下调用这个函数也不能保证毫秒级的准确性)。所以,
startTime = int(time.time() * 100)
#...
endTime = int(time.time() * 100)
这样就能满足你想要的条件,即 endTime - startTime >= sleepTime