绕过浮点舍入问题

时间:2018-06-04 13:08:17

标签: python pandas

Df.round()正在回归令人沮丧的结果。

在以下示例中,我尝试将小数舍入为五位数。每个小数在小数点后六位有一个5。当我舍入时,我希望第五个十进制值向上舍入。这有时只会发生..

df2 = pd.DataFrame([0.703125, 0.831215])
df2
Out[4]: 
          0
0  0.703125
1  0.831215
df2.round(5)
Out[5]: 
         0
0  0.70312
1  0.83122

经过一些谷歌搜索后,听起来问题与浮点数的表示方式有关by the computer。解决这个问题的实用方法是什么?

1 个答案:

答案 0 :(得分:4)

你说“我希望第五个十进制值向上舍入”。好的,但在什么情况下呢?鉴于您的示例输入只有6位有效数字,并且Python浮点数(64位)支持大约15位数,您可以安全地添加一小部分数据以获得所需的行为:

(df2 + 1e-12).round(5)

它给出了:

         0
0  0.70313
1  0.83122

假设df2中的最大值小于1000左右,假设6个sigfigs,则最小值小于大约1e-6。添加少量可以确保任何尾随的“5”都被向上舍入,只要您的输入在某个已知范围内,其中小的加法不会使结果不正确。