优化转换为十进制表示

时间:2014-11-28 19:02:29

标签: python optimization decimal

我有一个以两个整数开头的时间: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 ...

问题:有更快的方法吗?这是我的一个程序的瓶颈,因为它被称为这么多次。主犯是十进制添加,然后是十进制

2 个答案:

答案 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))