我有一个我讨厌的号码(我肯定还有其他号码)。在
是的
a17=0.0249999999999999
a18=0.02499999999999999
案例1:
^{pr2}$案例2:
round(a17,3)=round(a18,3)=0.025
案例3:
round(round(a17,3),2)=round(round(a18,3),2)=0.03
但当这些数字在数据框中时。。。在
案例4:
df=pd.DataFrame([a17,a18])
np.round(df.round(3),2)=[0.02, 0.02]
为什么我得到的答案与案例1中的答案相同?在
当您使用浮动时,您将无法获得精确的值,但在大多数情况下只能近似值。因为浮点的内存组织。在
你应该记住小数点印刷的时候,你应该记住!!!
这是不一样的。在
精确值在0.xxxx中“.”后面只有17位数字
这就是为什么:
<>这对于大多数编程语言(FORTRAN、Python、C++等)是正确的。让我们看看Python文档的片段:
(https://docs.python.org/3/tutorial/floatingpoint.html)
停在任何有限位数,你就得到了一个近似值。在今天的大多数机器上,浮点数是用二进制分数来近似的,分子使用前53位,从最高有效位开始,分母是2的幂次方。在1/10的情况下,二进制分数为3602879701896397/2**55,接近但不完全等于1/10的真值。在
由于值的显示方式,许多用户不知道近似值。Python只打印机器存储的二进制近似值的十进制近似值。在大多数机器上,如果Python要打印存储为0.1的二进制近似值的真正的十进制值,它必须显示
这比大多数人认为有用的位数要多,因此Python通过显示舍入值来保持位数的可管理性
请记住,即使打印的结果看起来像1/10的精确值,实际存储的值是最接近的可表示的二进制分数。在
有趣的是,有许多不同的十进制数共享相同的近似二进制分数。例如,数字0.1和0.1000000000000001和0.100000000000000551151312257827021181583404541015625均由3602879701896397/2**55近似。由于所有这些十进制值都具有相同的近似值,因此可以显示其中任何一个值,同时仍保持不变的eval(repr(x))==x
让我们看看NumPy文档的片段:
(https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.around.html#numpy.around)
为了理解-np.圆形使用np.周围-参见NumPy文档
结论:
对你来说np.圆形根据上面描述的规则,刚刚将0.025修约为0.02(来源:NumPy文档)
相关问题 更多 >
编程相关推荐