python small float舍入到2位小数

时间:2018-02-01 21:33:55

标签: python floating-point decimal rounding precision

是的,另外一个,但是,我已经尝试了大量可用的示例和解决方案,似乎无法解决我的问题。

我需要衡量API调用的性能,并决定使用以下内容:

for x in range(0, 5):
    try:
        nf=urllib.urlopen(_url)
        _start=time.time()
        page=nf.read()
        _end=time.time()
        nf.close()
        _delta=(_end - _start)
        _processingTimelist.append(_delta)
        time.sleep(1)
    except:
        _processingTimelist.append(9999)

结果:

[5.2928924560546875e-05, 4.9114227294921875e-05, 4.887580871582031e-05, 7.510185241699219e-05, 5.1975250244140625e-05]

5.55992126465e-05

到目前为止这么好,看起来就像我追求的那样。但是现在我想将它提交给一个监控服务,并希望将其舍入到2位数,因为它们已经代表一个超小的单位(毫秒)并且发送这么多数字是非常荒谬的。

我已尝试了大量这些舍入方法,但我得到了超级奇怪的结果,如:

_processingTime = round(_processingTime, 3)
print _processingTime

result:
0.0

OR:

_processingTime = float("{0:.4f}".format(_processingTime))
print _processingTime

result:
0.0001

为什么会这样,以及如何解决?

我并不太关心精度,但我希望例如5.55992126465e-05变为5.56,甚至5.55也是可以接受的,因为实时单位的差异可以忽略不计。

1 个答案:

答案 0 :(得分:4)

您可以使用科学记数法格式化您的号码:

>>> '{:.2e}'.format(5.2928924560546875e-05)
'5.29e-05'

您也可以将其转换回浮动:

>>> float('{:.2e}'.format(5.2928924560546875e-05))
5.29e-05

或者你的所有数字:

>>> numbers = [5.2928924560546875e-05, 4.9114227294921875e-05, 4.887580871582031e-05, 
               7.510185241699219e-05, 5.1975250244140625e-05]
>>> [float('{:.2e}'.format(x)) for x in numbers]
[5.29e-05, 4.91e-05, 4.89e-05, 7.51e-05, 5.2e-05]