当前位置: 首页 > 科技观察

Python的两种取整方法你学会了吗?

时间:2023-03-18 02:38:13 科技观察

1。使用舍入在大多数情况下,我们会用舍入来保留小数,但这不符合我们数学知识中的规律。round(number[,ndigits])round()按照以下规则对数字(通常是浮点数)进行四舍五入(Python3):先说ndigits不为0的情况:如果保留的最后一位digit小于等于4,则向上取整,如round(5.214,2)=5.21如果保留位数最后一位等于5,且该位数后面没有数字,则不进位作,如round(5.215,2)=5.21如果保留位的最后一位等于5,且该位后面有一个数,则进位,如round(5.2151,2)=5.22如果保留位最后一位大于等于6,则进位。比如round(5.216,2)=5.22>>>round(5.214,2)5.21>>>round(5.215,2)5.21>>>round(5.2151,2)5.22>>>round(5.216,2)5.22>>>但是上面的规则2也有例外,比如:>>>round(0.645,2)0.65>>>原因是浮点数用二进制表示时只能表示近似值,虽然我们看到的是0.645,实际上面,Python存储的是0.645000000000000017763568394002504646778106689453125,Python按照IEEE754标准存储浮点数。再说ndigits为0或None的情况:如果保留位最后一位小于等于4,则向上取整,如round(1.4)=1如果保留位最后一位等于5且后面没有数字,则取最近的偶数,如round(1.5)=2,round(2.5)=2如果保留位最后一位等于5,则有后面的一个数,则取最近的一位,如round(2.51)=3如果保留位的最后一位大于等于6,则进位。比如round(1.6)=2>>>round(1.5)2>>>round(1.4)1>>>round(1.6)2>>>round(2.5)2>>>round(2.51)3>>>请注意,f字符串保留为圆形:>>>f"{1.5:.0f}"'2'>>>f"{2.5:.0f}"'2'>>>f"{2.51:.0f}"'3'那么如何得到一个符合数学舍入规则的方法呢?请使用方法二:2、使用Decimal方法有一个前提条件,就是必须先将小数转换成字符串,这样才能准确表示浮点数。importdecimal#修改四舍五入方式为四舍五入decimal.getcontext().rounding="ROUND_HALF_UP"x="0.645"x1=decimal.Decimal(x).quantize(decimal.Decimal("0.00"))print(f"{x}的近似值是{x1}")y="2.5"y1=decimal.Decimal(y).quantize(decimal.Decimal("0"))print(f"{y}的近似值是{y1}")上述程序的输出如下:0.645是0.652.5的近似值,是3的近似值,与我们的数学舍入完全匹配。最后,浮点数在二进制表示中只能表示近似值。关于这一点,可以参考文献[1]。了解了浮点数表示之后,再看舍入就不会那么陌生了。参考[1]文档:https://img.ydisp.cn/news/20220916/3kr2vihawu1.html