pandas.DataFrame.round() 不在所需位数后截断小数值

pandas.DataFrame.round() not truncating decimal values after desired number of places

pandas.DataFrame.round() 在下面的数据框中给出了一些不可预测的输出。谁能帮我了解这里发生了什么?

df = pd.DataFrame([(61.21, 69.32), (65.1938, .67)], columns=['A', 'B'], dtype='float32')
df.round(2)

以上代码输出:

           A      B
0  61.209999  69.32
1  65.190002   0.67

为什么 round(2) 不截断小数点后的前 2 位数字?当我尝试使用 dtype='float64' 时,它会工作并输出如下:

df.astype('float64').round(2) 
       A      B
0  61.21  69.32
1  65.19   0.67

数据框中的值有问题吗?

我不想将输出格式化为字符串 (round(2).applymap('{:.2f}'.format)) 以获得所需的小数位数。我想知道为什么列的小数点后位数不同。

我正在使用 pandas 版本“0.24.1”。

浮点数并不精确,不是每个数字都能精确表示。就像 1/3 不能用有限的十进制数精确表示一样,有许多数字不能用 IEEE 浮点格式精确表示(但可能可以在十进制系统中表示)。

在这种情况下,包括四舍五入(到小数位)在内的浮点运算将return一个值,具体取决于所选的四舍五入模式,通常是最接近的浮点数。

这个数字可能略小于带两位小数的实际十进制值,因此在十进制表示法中有很多九。