我有一个以两个整数开头的时间:t_sec
(秒数)和t_nsec
(纳秒数)。 t_nsec
永远不会超过999999999(它总是不到一秒)。
我想最终得到一个数字表示,总是精确到9位小数。我正在使用Decimal类,但是,任何数字浮点表示都可以。
示例:t_sec
= 10,t_nsec
= 143,然后输出应为10.000000143
当前解决方案(工作正常但速度慢):
try:
fraction = Decimal(t_nsec/1e9)
answer = Decimal(t_sec) + fraction
answer = answer.quantize(Decimal('0.000000001'), rounding=ROUND_DOWN)
return answer
except:
... error handling ...
问题:有更快的方法吗?这是我的一个程序的瓶颈,因为它被称为这么多次。主犯是十进制添加,然后是十进制新。
答案 0 :(得分:2)
如果有任何浮点表示,那么坚持浮点。 FP算法在硬件中处理:
answer = t_sec + (t_nsec / 10**9)
你已经使用t_nsec/1e9
杀死了你的精确度,产生了一个浮点数。如果您使用的是Python 2且未使用from __future__ import division
,则需要将其中一个除法操作数设为浮点数:
answer = t_sec + (float(t_nsec) / 10**9)
答案 1 :(得分:1)
这只是一些作弊行为:
answer = Decimal('{}.{:09}'.format(t_sec, t_nsec))